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
键,因为 someKey1
、someKey2
和 errors
密钥与我的用例无关。
是否可以将 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
我有一个 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
键,因为 someKey1
、someKey2
和 errors
密钥与我的用例无关。
是否可以将 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