#java #json #spring-boot
#ява #json #пружинный ботинок #java #весенняя загрузка
Вопрос:
У меня есть такой запрос:
let jsonData= {};
jsonData["className"]= className;
jsonData["models"]= arr;
let endPoint= "/classses?classAndModel=" encodeURIComponent(JSON.stringfy(jsonData));
return $.ajax({
url: host endPoint,
data: data,
cache: false,
contentType: false,
processData: false,
method: "POST"
});
Я хочу преобразовать этот json в объект Java.Я попробовал этот
My rest service is:
@PostMapping(value=/classes",consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<Void> addClassAndModelMapping(ClassAndModels classAndModels){
}
public class ClassAndModels {
ClassAndModelResult classAndModel;
...getter and setter...
}
public ClassAndModelResult {
String className;
List<String> models;
...getter and setters...
}
Я получаю ошибку 400.Если я изменю эту строку ClassAndModelResult classAndModel
на String classAndResult
.Я получаю ответ, но мне нужен тип объекта.У тебя есть какие-нибудь идеи?
Комментарии:
1. Вам необходимо предоставить более подробную информацию. Как выглядит JSON, который вы отправляете? Вы пробовали создать экземпляр
ClassAndModels
и сериализовать его в JSON, чтобы посмотреть, как он сравнивается с JSON, который вы передаете?2. Вы используете
@PostMapping
аннотации. Похоже, вы запускаете приложение Spring (Boot), это правильно?3. @smichel да, это правда
Ответ №1:
Первая часть кода показывает, что вы отправляете данные в виде строки запроса.
Взгляните на https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html
Но, учитывая @PostMapping, вы должны отправить эти данные в теле запроса и сделать что-то подобное на стороне сервера.
@PostMapping("/classes")
public ResponseEntity<Void> addClassAndModelMapping(@RequestBody ClassAndModels classAndModels){
//
}
Как говорит Филс, вы можете добавить GetMapping на свой контроллер, чтобы увидеть, как ваш ClassAndModels сериализуется
Источник:https://spring.io/guides/tutorials/bookmarks /
P.S. Извините за мой английский, я не являюсь носителем языка.
Комментарии:
1. ДА. Данные отправляются в виде строки запроса. Я добавлю аннотацию @RequestBody
2. Могу ли я использовать строку запроса и @RequestBody вместе?
3. @sneijder10 да. Попробуйте что-то вроде public ResponseEntity<Void> addClassAndModelMapping(@RequestBody ClassAndModels classAndModels, @RequestParam(обязательно = false) Строка testParam). Таким образом, вы можете отправить host:port/api/classes?testParam=XXXXXXX и json в теле запроса
4. @sneijder10 в части ajax попробуйте
dataType: 'json', contentType: 'application/json',
, а также установитеdata: jsonData
Ответ №2:
Пожалуйста, попробуйте добавить аннотацию @RequestParam или лучше использовать значение classAndModel в качестве RequestBody, аналогичное приведенному ниже.А также исправить орфографическую ошибку в URL-адресе javascript.
@PostMapping(value = "/classes")
public ResponseEntity<Void> addClassAndModelMapping(@RequestBody ClassAndModels modal) {
}
Комментарии:
1. Вы исправили ту орфографическую ошибку, упомянутую в ответе?
2. Пожалуйста, используйте application / json в consumes
3. Пожалуйста, отправьте эти данные json вместе с полным запросом
4. Также я попробовал это @RequestMapping(значение = «/classes», метод = RequestMethod. POST, производит = «application/json», потребляет = «application/json»)