将请求体中封装的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
},
}

}

在intectData((中,我想解析json并创建两个列表,每个列表用于订单和退货。过去,我处理过json映射到同一个Java类的所有项。如何将json项解析并映射到两个不同的java类中?

您可能应该重新考虑一下RESTapi的设置。最好基于类创建端点,而不是使用处理多个端点的通用端点。虽然这看起来像是更多的工作,但它将真正帮助您生成更可维护的代码。事实上,您现在遇到了这个问题,您希望ObjectMapper从一个Json解析到不同的类,这很好地表明您正朝着错误的方向前进。

这里有一个伟大的REST API设计最佳实践在堆栈可用的

[JsonString]-一些json解析库->[Collection<Entity>]-.stream((.collect(Collectors.groupingBy(((->[映射<字符串(类型(,集合<实体>>]

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html

最新更新