У меня есть код:
1) аякс
addFarmByPost = (e) => {
e.preventDefault();
alert(JSON.stringify(this.state));
fetch("http://localhost:8080/farms", {
method: "POST",
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify(this.state)
})
}
2) Контроллер отдыха
@PostMapping("/farms")
public ResponseEntity<Object> addFarm(@RequestBody String farmParam) {...//do }
3) Конфигурация Clobal cors в весеннем загрузочном приложении:
**@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter(){
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("POST", "GET", "PUT", "DELETE", "OPTIONS")
.allowedOrigins("*")
.allowedHeaders("*")
.allowCredentials(false)
.maxAge(6000);
}
};
}**
Но когда я делаю ajax POST-запрос (приложение/json), у меня есть исключение ошибка 400, неверный запрос. И исключение: Выполнение обработчика: org.springframework.http.converter.HttpMessageNotReadableException: отсутствует требуемый текст запроса.
Метод Get CORS работает хорошо. Как я могу это исправить и понять причину ошибки.Ты.
Абду Райес, я использую строку, потому что мне нужно получить два java-объекта. Я могу сказать, что эта конфигурация работает хорошо, когда я не использую cors в своем приложении.
можете ли вы изменить заголовок типа контента на приложение/текст
попробуйте настроить заголовок на text/plain, потому что установка заголовка на application/json заставит Spring искать соответствующий считыватель тела (в большинстве случаев это Jackson) и попытается преобразовать его в ваш целевой тип, в этом случае это String.class, и это будет вызвать ошибку (я полагаю, потому что я понятия не имею о содержимом this.state в этом случае)




Исключением было то, что data: JSON.stringify(this.state) должен быть body: JSON.stringify(this.state).
Поскольку я использую reactJS, я должен писать body, а не data в запросе ajax.
Тай
Проблема не в cors, как указывает исключение (необходимое тело запроса отсутствует), проблема в том, что Spring не может найти тело запроса для анализа. и почему вы используете тело как строку ??