[SPRING] RestTemplate + 잭슨
SPRINGRestTemplate + 잭슨
Spring의 RestTemplate과 Jackson을 사용하여 WebService를 사용하려고합니다. 필자는 여러 가지 자습서를 따라 DAO 작성 시점에 이르렀습니다. 이것은 모든 도메인 객체를 가져 오는 메소드입니다.
// Create a Rest template
RestTemplate restTemplate = new RestTemplate();
// Create a list for the message converters
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
// Add the Jackson Message converter
messageConverters.add(new MappingJacksonHttpMessageConverter());
// Add the message converters to the restTemplate
restTemplate.setMessageConverters(messageConverters);
List<Station> resultList = Arrays.asList(restTemplate.getForObject(BASE_URL, Station[].class));
return resultList;
그러나 제 웹 서비스는 즉시 Station 객체 배열을 반환하지 않습니다. 오히려이 방식으로 의미 론적 표현을 반환합니다.
{"success":true,"message":"Records Retrieved Successfully","data":{"totalCount":"14","stations":[{"id":"1264","station":"Station 1","idJefatura":"1","syncDate":"2013-01-24 13:20:43"}, ...] }}
그래서 내 문제는 적절한 방법처럼 보이지 않는 특별한 객체를 만들지 않고 RestTemplate이 "스테이션"표시기 바로 다음에 객체 목록을 구문 분석하도록 "알리는"방법이 확실치 않다는 것입니다.
RestTemplate에 적합한 구문을 지정하는 방법이 있습니까?
편집 : 나는 이런 래퍼 개체를 만들었습니다 :
public class RestResponseObject {
private boolean success;
private String message;
private Data data;
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public class Data {
private int totalCount;
private List<Station> stations;
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public List<Station> getStations() {
return stations;
}
public void setStations(List<Station> estaciones) {
this.stations= estaciones;
}
}
}
하지만 JSON 응답에 내 객체 목록의 키 이름이 해당 도메인 객체의 클래스에 종속되어 있기 때문에이 객체를 일반화하는 방법을 고민하고 있습니다.
해결법
-
==============================
1.여기에는 두 가지 해결책이 있습니다.
여기에는 두 가지 해결책이 있습니다.
다음은 그 예입니다.
응답 클래스
public class MyResponseClass { // other variables private List<Station> stations; //it getters and setters }
레스트 클라이언트에서
MyResponseClass response = restTemplate.getForObject(BASE_URL, MyResponseClass.class) List<Station> resultList = response.getStations()
from https://stackoverflow.com/questions/18328492/resttemplate-jackson by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 : REST 호출 응답에 쿠키 삽입 (0) | 2019.03.28 |
---|---|
[SPRING] @ NamedNativeQuery - 어떻게 그것을 리포지토리 메서드에 바인딩 할 수 있습니까? (0) | 2019.03.28 |
[SPRING] 스프링 보안 @AuthenticationPrincipal (0) | 2019.03.28 |
[SPRING] Mockito NullPointerException (0) | 2019.03.28 |
[SPRING] Hibernate는 sql_show = true로 SQL 문을 보여주지 않는다. (0) | 2019.03.28 |