当前位置: 首页 > 知识库问答 >
问题:

将封装在请求体中的JSON数据反序列化为两个不同的模型对象

仉峻
2023-03-14

我正在学习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
} 

}

字符串数据是JSON,它包含两种不同的类型——订单和返回。

{
"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并创建两个列表——每个列表对应订单和返回。在过去,我处理了json映射到同一个Java类中的所有项。如何将json项解析并映射到两个不同的java类?

共有2个答案

尤研
2023-03-14

[jsonString]-一些json解析库-

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

郏瀚
2023-03-14

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

堆栈上有一个很好的REST API设计最佳实践

 类似资料:
  • 我正在从事一个SpringMVC项目,我需要完成的任务之一是让用户在POST请求中发送一个JSON数据字符串。我知道Spring将使用Jackson对对象反序列化JSON,但如果我尝试以下方法: 我只是返回HTTP 400错误请求(“客户端发送的请求在语法上不正确”)。 如何获取客户端作为字符串发送的原始JSON?

  • 我正在使用Betfair的API开发一个REST web应用程序,因此我需要序列化/反序列化JSON,以便发送HttpRequest并读取HttpResponse。 POM依赖项 我错在哪?

  • 问题内容: 我有由第三方编码为固定长度数组的json’ed 元组数组: 我想使用json魔术来获取的实例列表 请帮助我放置适当的注释,以使ObjectMapper发挥作用。 我无法控制传入的格式,而我所有的google’n都以答案来回答如何将适当的json对象(而非数组)数组映射到对象列表 问题答案: 添加以下注释: 并且它应该根据需要序列化条目。 另外:然后使用它来强制执行特定顺序是最安全的,因

  • 问题内容: 我在使用AJAX访问的Java服务器应用程序中有一个字符串。它看起来像以下内容: 当从服务器提取字符串时,是否有一种简单的方法可以将其转换为活动的JavaScript对象(或数组)?还是我必须手动拆分字符串并手动构建对象? 问题答案: 现代浏览器支持。 在不浏览器,您可以包括在库中。

  • 有没有办法将一般对象序列化为Json并将Json反序列化为对象<如果对象是一个实体,我可以使用Jackson 2库来实现这个目的<但是如果对象是一个普通类,我该怎么做呢? 例如,我想序列化com.datastax.driver.core.querybuilder。将更新为Json并保存到DB,然后搜索并反序列化它以更新对象,最后将其用作com.datastax.driver.core.Sessio

  • 问题内容: 如何将json格式的数据字符串转换为 匿名对象 ? 问题答案: C#4.0添加了可以使用的动态对象。看看这个。