Angular

#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 получил ту же ошибку при выборке