복붙노트

[SPRING] RestTemplate + 잭슨

SPRING

RestTemplate + 잭슨

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. ==============================

    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()
    
  2. from https://stackoverflow.com/questions/18328492/resttemplate-jackson by cc-by-sa and MIT license