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

将JSON响应中的特定键值映射到POJO类

邹毅
2023-03-14

我有一个API,它以以下格式返回JSON:

 {
      "errors": null,
      "someKey1": "someValue1",
      "someKey2": "someValue2",
      "response": {
          "id": 21,
          "key1": "value1",
          "key2": "value2",
          "key3": "value3",
          "key4": {
              "key5": [
                  {
                      "ABC": "abc",
                      "XYZ": 1,
                      "PQR": "pqr"
                  },
                  {
                      "ABC": "abc",
                      "XYZ": 3,
                      "PQR": "pqr"
                  }
              ]
          },
          "key6": "value6"
      }
    }

我还有一个POJO类,它具有与JSON响应的响应键对应的字段,因为someKey1someKey2错误键在我的用例中不相关。

是否可以将JSON响应映射到我的JavaPOJO类,即只映射响应键内的值?

一种可能的方法是接受String响应,并使用setter方法将其映射到我的POJO。

String apiResponse = restTemplate.exchange(someUrl, HttpMethod.GET, new HttpEntity<>(authHeader), String.class).getBody();
JSONObject jsonObject = new JSONObject(apiResponse);
MyObject myObject = buildNewObject(jsonObject.get("response"));

有更好的办法吗。像这样的

ResponseEntity<MyObject> responseEntity = restTemplate.exchange(someUrl, HttpMethod.GET, new HttpEntity<>(authHeader), MyObject.class).getBody().get("response");

共有2个答案

邢卓
2023-03-14

你可以使用getForObject的RestTemboard。

代码示例:

HttpClient client = new HttpClient();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("USERNAME","PASS");
RestTemplate template = new RestTemplate(commons);
MyObject myObject = template.getForObject(someUrl,MyObject.class);

public class MyObject  {
    @JsonProperty(value="response")
    private Map<String,String> response;
}
贺彬
2023-03-14

您可以创建一个Mapper类,其中POJO作为一个对象,其他额外的值作为变量,如下所示

class Mapper{

private PojoClass response;
private String someKey1;
private String somekey2;
private String errors;

//Create getters and setters

}

现在,响应将自动绑定到POJO,其他值将绑定到相应的键1和键2

 类似资料:
  • 我正在尝试使用Jackson将JSON映射到POJO。但是,由于此JSON包含对象的嵌套映射,当我将其反序列化到POJO时,timeseries信息不会转换为POJO。我只能在timeseries块中获取元数据部分和日期部分。timeseries块中的其他字段(如open、high和low)始终为空。 Jackson似乎无法将TimeSeries类中的字段与匹配。有人能告诉我该怎么做,或者给我指出

  • 我使用JAVA jackson将JSON映射到JAVA pojo对象,我的JSON文件是: 在之后,我收到了以下错误消息: 不能反序列化出START_ARRAY令牌 我的POJO课程: 请问,这种JSON格式的正确java POJO是什么?谢谢

  • 我和jackson一起绘制地图,我有点迷茫。我的Json具有以下结构 我确实找到了很多处理数组的教程,但我在第一个标记“d”时就已经失败了。而且根本不需要所有的“_元数据”标记。 我创建了一个包含lastName等属性和一个集合附件的pojo。但我的代码在标记“d”或“_元数据”时总是失败 还有杰克逊的读者 任何提示都将不胜感激。 问候马蒂亚斯

  • 问题内容: 我有以下JSON表示盐请求的服务器响应: 我尝试使用以下POJO映射它: 现在每次我这样做: 该为空。如何使用Gson将JSON映射到POJO?我的变量顺序对Gson映射重要吗? 问题答案: 我的变量顺序对Gson映射重要吗? 不,不是这样。 如何使用Gson将JSON映射到POJO? 它是 区分大小写 和JSON字符串键应该是相同的POJO类使用的变量名。 您可以使用@Seriali

  • 我有以下JSON来表示salt请求的服务器响应: 我尝试用以下POJO映射它: 每次我这样做: 为空。如何使用GSON将JSON映射到POJO?变量的顺序对Gson映射重要吗?

  • 我一直在研究GraphQL作为我的一些RESTAPI的替代品,虽然我认为我已经对基本知识了如指掌,就像我目前看到的大多数内容一样,但似乎缺少了一个重要的功能。 比如说,我有一系列这样的物品: 应用程序需要所有这些对象的映射,按ID索引: 我写过的每个API都能够以这样的格式返回结果,但我正在努力寻找一种用GraphQL来做到这一点的方法。我一直在运行第101个问题,但这更多地涉及未知模式。就我而言