2017-11-24 12 views
0

나는이 형식으로 JSON을 반환하는 API 가지고 : 나는 또한의 response 키에 해당 필드가있는 POJO 클래스가봄 RestTemplate지도의 특정 키 값

{ 
     "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" 
     } 
    } 

을 JSON 응답은 someKey1, someKey2errors 키가 내 용도와 관련이 없기 때문에 응답합니다.

JSON 응답을 Java POJO 클래스에 매핑 할 수 있습니까? 즉, response 키 내의 값만 매핑 할 수 있습니까?

가능한 한 가지 방법은 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"); 
+0

MyObject를 Response 클래스를 키로 사용하는 래퍼 클래스로 만들어야했습니다. d에서 응답을 받으면 효과가있었습니다. –

답변

0

당신은 지금 response가 자동으로 POJO에 바인딩

class Mapper{ 

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

//Create getters and setters 

} 

다음과 같이 하나의 객체 및 변수와 다른 별도의 값으로 당신의 POJO, 함께 Mapper 클래스를 만들 수 있습니다 및 다른 값은 해당 key1에 바인딩됩니다 key2 및 오류

0

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