java - 将请求体中封装的 JSON 数据反序列化为两个不同的模型对象
问题描述
我正在学习 SpringBoot 并且正在做这个编码挑战。到目前为止,我已经成功设置了控制器并完成了映射。
@RestController
@RequestMapping(path="/mydomain")
public class PaymentController {
@RequestMapping(method=RequestMethod.POST, value="/ingest")
public void ingestData(@RequestBody String data) {
System.out.println("ingest Data");
System.out.println(data);
// List<Orders>
// List<Returns>
}
@RequestMapping(method=RequestMethod.GET, value="/query")
public String queryData(@RequestBody String data) {
// look at LIST of order and return..and return something
}
}
String 数据是 JSON,它包含两种不同的类型- Order 和 Return。
{
"entries": {
{
type: "ORDER",
name: "order_1",
"attributes": {
"owner": "John"
}
},
{
type: "ORDER",
name: "order_2",
"attributes": {
"owner": "Mike",
"buyer": "Bob"
}
// attributes is a key/value pair Map
},
{
type: "RETURN",
name: "return_1",
"attributes": {
"user": "kelly",
"time": "null",
"inputs": [
"USD",
"EUR"
],
"outputs": [
"CAD",
"GBP"
]
}
// attributes is a key/value pair Map
},
}
}
在 ingestData() 中,我想解析 json 并创建 2 个列表 - 每个列表用于订单和退货。过去,我处理过 json 映射到同一个 Java 类的所有项目。如何解析 json 项并将其映射到 2 个不同的 java 类中?
解决方案
您可能应该重新考虑一下您的 REST api 设置。最好基于类创建端点,而不是拥有处理多个的通用端点。尽管现在这看起来像是更多的工作,但它确实会帮助您生成更多可维护的代码。您现在遇到了这个问题,您希望 ObjectMapper 从单个 Json 解析为不同的类,这一事实很好地表明您走错了方向。
Stack 上有一个很棒的 REST API 设计最佳实践