Как получить доступ к JSON объекту вложенной структуры, отправленному Angular в бэкэнд загрузки Spring? - PullRequest
1 голос
/ 21 февраля 2020

Предположим, у меня есть пост-запрос http от angular со следующей структурой JSON:

   {
       "abc":{
               "pqr":2,
               "lmn":5,
               "xyz":89
             },
       "def":[a,b,c,d],
       "klm":{
               //object attributes
             }
   }

, который отправляется как пост-запрос от angular HttpClient.

Теперь в весеннем загрузочном контроллере я принимаю его, используя Hashmap

@PostMapping("/createXyzFunctionality")
    public void createXyzFunctionality(@RequestBody Map<String, Object> json)
    {
      for (Map.Entry<String, Object> entry : json.entrySet())
      {
        //Using entry.getKey() and entry.getValue() I can access the attributes 
        //"abc","def","klm" as string but I want to access as class objects
        .....
      }
    }

Теперь у меня есть класс модели для «ab c», но это не совсем экземпляр моего класса, поэтому, когда я do

CustomClass val = (CustomClass) entry.getValue();

Я получил ClassCastException, помогите мне получить доступ к атрибутам объектов в hashmap без изменения моделей при весенней загрузке.

CustomClass{
      private Integer pqr,lmn,xyz;
      private String extraVariable;
      //getters setters
}

Я хочу получить pqr, lmn, xyz значения из "ab c".

1 Ответ

4 голосов
/ 21 февраля 2020

Вместо @RequestBody Map<String, Object> json вы должны ожидать объект класса в RequestBody.

Так что создайте набор DTO:

public class BodyClass {
    private Abc abc;
    private List<String> def;
    private Klm klm;
    //getters & setters
}
public class Abc {
    private Integer pqr;
    private Integer lmn;
    private Integer xyz;
}
public class Klm {
    //some parameters, getters & setters
}

И примите @RequestBody BodyClass bodyClass, например :

@PostMapping("/createXyzFunctionality")
public void createXyzFunctionality(@RequestBody BodyClass bodyClass) {
    //your logic here
}

bodyClass будет содержать все атрибуты JSON, которые вы отправляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...