#angular #spring #rest #spring-mvc
#angular #spring #остальное #spring-mvc
Вопрос:
У меня есть следующий Spring API:
@CrossOrigin(origins = "http://localhost:4200", allowCredentials = "true", maxAge = 3600)
@RequestMapping(value = "/seanPost", method = RequestMethod.POST, headers = "Content-Type=application/json")
public JSONObject post(@RequestBody TrackFileStatusFindForm form, HttpServletRequest request ) {
Когда я использую postman для его тестирования, он работает нормально.
В моем тестовом приложении Angular я обычно получаю сообщение об ошибке 415 — неподдерживаемый тип носителя. Я заметил, что angular устанавливает тип содержимого как текстовый / обычный, тогда как Postman устанавливает тип содержимого: application / json
Я попытался установить заголовок в Angular, как показано ниже, но затем я получаю проблему CORS, блокирующую запрос, и ошибку 401, неавторизованную в инструментах разработки.
options = {
headers: new HttpHeaders()
.set('Content-Type', 'application/json')
};
onSubmit() {
this.http.post(this.APP_URL '/s/seanPost/', JSON.stringify(this.model), this.options)
.subscribe(
data => {
this.postId = data;
console.log(this.postId);
},
error => {
console.log('Error occured', error);
}
)
}
Я попытался добавить фильтр CORS в SpringMVCConfig
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS")
.allowedOrigins("http://localhost:4200")
.allowedHeaders("Authorization", "Cache-Control", "Content-Type", "Accept", "X-Requested-With", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Origin")
.exposedHeaders("Access-Control-Expose-Headers", "Authorization", "Cache-Control", "Content-Type", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Origin");
}
Но, похоже, это не помогает.
Оставшийся URL-адрес — https, если это поможет.
Спасибо
Комментарии:
1. Вы пытались сделать запрос с помощью fetch вместо http.post?
2. @tufonas нет, я попробую это сейчас
3. работает ли это, когда вы разрешаете все источники? т. е. «*»
4. @IanPreglo нет, это работает, только если я укажу URL
5. @tufonas получил ту же ошибку при выборке