【问题标题】:How to unmarshall a ReponseEntity Object returned by RestTemplate?如何解组 RestTemplate 返回的 ResponseEntity 对象?
【发布时间】:2020-08-21 13:36:27
【问题描述】:

我有两个第三方 API,我正在使用 RestTemplate 获得 ResponseEntity<Object> 的响应。我想将响应解组为对象,以便可以访问其中的内容。

ResponseEntity<Object> response = restTemplate.exchange(apiEndPointToHit,HttpMethod.GET,null,Object.class);

第一个 API 响应

    {
        "responseStatus": "SUCCESS",
        "size": 88,
        "start": 0,
        "limit": 200,
        "sort": "id asc",
        "users": [
            {
                "user": {
                    "user_name": "XYZ",
                    "user_first_name": "XYZ",
                    "user_last_name: "XYZ",
                    "user_email": "XYZ",
                  }
            },

           {
                "user":{
                   "user_name":"ABC",
                   "user_first_name":"ABC",
                   "user_last_name":"ABC",
                 },
             },

             {
               "user":{
                   "user_name":"PQR",
                   "user_first_name":"PQR",
                   "user_last_name":"PQR",
                }
             },

           }
         ]
    }

在此响应中,用户将包含多个用户。我想获取所有用户的列表。这样我就可以访问该列表字段中每个用户对象的内容,例如 user_name、user_first_name 等。

第二个 API 响应是

{
  "message": {
    "documents": {
   }
 }
}

在这种情况下,一条消息将包含一个文档。我想访问该文档。 JSON 响应包含多个字段。所以不可能创建 POJO 类。 有没有办法通过创建 POJO 类来访问响应实体中的对象?

【问题讨论】:

  • 老实说,你的第一个 api 响应看起来很可疑 - 你有“用户” - 这是一个数组,很好 - 1!对象,包含 3x 相同的字段“用户”....
  • @Worthless 感谢您指出这一点。我已经更新了我的问题

标签: java spring-boot spring-mvc


【解决方案1】:

我们可以使用对象映射器或 JSONObject 来帮助反序列化 JSON 主体。我建议使用 JSONObject 并按照以下示例解组 jsonbody。

1.添加依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>
  1. 初始化 JSONObject,从 restTemplate 传递 jsonReponse。
JSONObject jo = new JSONObject(jsonResponse);
  1. 尝试通过这样做来访问 jsonResponse 中的对象
getJsonObject/getJsonArray

JSONArray ja = jo.getJsonArray("users");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2018-01-11
    • 1970-01-01
    • 2020-05-23
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多