Spring RestTemplate Map 内部的特定键值 JSON 对 POJO 的响应 class

Spring RestTemplate Map specific key value inside JSON response to POJO class

我有一个 API,returns 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 class,它的字段对应于 JSON 响应的 response 键,因为 someKey1someKey2errors 密钥与我的用例无关。

是否可以将 JSON 响应映射到我的 Java POJO class,即仅映射 response 键内的值?

一种可能的方法是接受字符串响应并使用 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");

可以使用RestTemplate的getForObject。

代码示例:

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;
}

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

class Mapper{

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

//Create getters and setters

}

现在 response 将自动绑定到 POJO,其他值将绑定到相应的 key1 key2 和 errors