RestTemplate + Jackson
Eu quero usar Spring's RestTemplate mais Jackson para consumir um WebService. Eu segui vários tutoriais e cheguei ao ponto de criar os DAOs. Este é o método em que obtenho todos os meus objetos de domínio:
// 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;
Mas meu serviço da Web não retorna uma matriz de objetos Station imediatamente, mas sim uma expressão semântica mais desta maneira:
{"success":true,"message":"Records Retrieved Successfully","data":{"totalCount":"14","stations":[{"id":"1264","station":"Station 1","idJefatura":"1","syncDate":"2013-01-24 13:20:43"}, ...] }}
Então, meu problema é que eu não tenho certeza de como "dizer" RestTemplate para analisar a lista de objetos logo após o indicador "estações", sem criar um objeto ad hoc, que não parece ser a solução adequada.
Existe alguma maneira de especificar a sintaxe correta para RestTemplate?
EDIT: Eu criei um objeto wrapper como este:
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;
}
}
}
Mas estou lutando para tornar esse objeto genérico, já que o nome da chave da minha lista de objetos na resposta JSON depende da classe desse objeto de domínio.