【问题标题】:How to access a JSON object of nested structure sent by Angular to Spring boot backend?如何访问 Angular 发送到 Spring Boot 后端的嵌套结构的 JSON 对象?
【发布时间】:2020-06-05 14:31:37
【问题描述】:

假设我有一个来自 angular 的 post http 请求具有以下 JSON 结构:

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

从 Angular HttpClient 作为发布请求发送。

现在在 spring boot 控制器中,我使用

的 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
        .....
      }
    }

现在,我有一个“abc”的模型类,但不完全是我的类的实例,所以当我这样做时

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

我得到了 ClassCastException,帮助我访问 hashmap 中对象的属性,而无需更改 spring boot 中的模型。

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

我希望 pqr,lmn,xyz 从“abc”中获取值。

【问题讨论】:

  • 将对象映射到特定的类通常是个好主意。
  • @Carsten 我假设你想写“......不是一个好主意”?
  • @Endzeit 大声笑没有。你到底是从哪里得到这个想法的?
  • @Carsten 我认为存在误解。我认为您正在谈论将 JSON-Objects 映射到特定类而不是 Object 类。我认为您的意思是将 Object 转换为特定的类是个好主意。我怀疑铸造是一个好主意,应该在适用的情况下规避。我同意您应该使用特定的类和一般的强类型。我的错。

标签: java angular spring spring-boot


【解决方案1】:

您应该期望 RequestBody 中的类的对象而不是 @RequestBody Map&lt;String, Object&gt; json

所以创建一组 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 的所有属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2017-02-09
    • 2021-12-26
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多