Java 如何访问Angular发送到Spring boot后端的嵌套结构JSON对象?
假设我有一个来自angular的post http请求,具有以下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
{
"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
}