Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问Angular发送到Spring boot后端的嵌套结构JSON对象?_Java_Angular_Spring_Spring Boot - Fatal编程技术网

Java 如何访问Angular发送到Spring boot后端的嵌套结构JSON对象?

Java 如何访问Angular发送到Spring boot后端的嵌套结构JSON对象?,java,angular,spring,spring-boot,Java,Angular,Spring,Spring Boot,假设我有一个来自angular的post http请求,具有以下JSON结构: { "abc":{ "pqr":2, "lmn":5, "xyz":89 }, "def":[a,b,c,d], "klm":{ //object attributes } } 它作为post

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

   {
       "abc":{
               "pqr":2,
               "lmn":5,
               "xyz":89
             },
       "def":[a,b,c,d],
       "klm":{
               //object attributes
             }
   }
它作为post请求从HttpClient发送

现在在SpringBootController中,我使用

@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
        .....
      }
    }
我得到了ClassCastException,帮助我访问hashmap中对象的属性,而无需在spring boot中更改模型

CustomClass{
      private Integer pqr,lmn,xyz;
      private String extraVariable;
      //getters setters
}
我希望pqr、lmn、xyz从abc获取值。

而不是@RequestBody-Map-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
}
bodyClass将包含您正在发送的JSON的所有属性。

您应该在RequestBody中看到该类的对象,而不是@RequestBody Map 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
}

bodyClass将包含您正在发送的JSON的所有属性。

将对象映射到特定类通常是一个好主意。@Carsten我假设您想编写。。。不是个好主意吗?@Endzeit lol no.你到底从哪里得到这个主意的?@Carsten我想这是个误会。我认为您所说的是将JSON对象映射到特定类,而不是对象类。我认为你们的意思是将对象强制转换到特定的类是个好主意。我怀疑铸造是一个好主意,在适用的情况下应该避免。我同意你应该使用特定的类和一般的强类型。我的错误。将对象映射到特定的类通常是个好主意。@Carsten我想你是想写。。。不是个好主意吗?@Endzeit lol no.你到底从哪里得到这个主意的?@Carsten我想这是个误会。我认为您所说的是将JSON对象映射到特定类,而不是对象类。我认为你们的意思是将对象强制转换到特定的类是个好主意。我怀疑铸造是一个好主意,在适用的情况下应该避免。我同意你应该使用特定的类和一般的强类型。我的错误。
@PostMapping("/createXyzFunctionality")
public void createXyzFunctionality(@RequestBody BodyClass bodyClass) {
    //your logic here
}