Преобразовать объект json в объект Java

#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»)