2016-07-20 4 views
2

Я дал эту модельSpring RestTemplate получить родовой объект

public class ResponseMessage<T> { 

    private T result; 
    private ResultCode resultCode; 
    private String details; 

    public ResponseMessage(T result, ResultCode resultCode, String details) { 
     this.result = result; 
     this.resultCode = resultCode; 
     this.details = details; 
    } 
//getters and setters 

и когда я получаю эту модель с сервера я conwert его

RestTemplate restTemplate = new RestTemplate(); 
     String result = restTemplate.getForObject(lkAuthListUrl, String.class); 
     Type listType = new TypeToken<ResponseMessage<LkAuth[]>>() { 
     }.getType(); 
     ResponseMessage<LkAuth[]> model = Converter.me().getModel(result, listType); 

и конвертер я делаю это

public <T> T getModel(String jsonStr, Type type) { 
     T t = null; 
     try { 
      t = gson.fromJson(jsonStr, type); 
     } catch (Exception e) { 
      System.out.print(e); 
     } 
     return t; 
    } 

Могу ли я избежать конвертации в моем методе и перенести эту обязанность на RestTemplate?

что-то Лиле это

ResponseMessage<LkAuth[]> model = restTemplate.getForObject(lkAuthListUrl, ResponseMessage<LkAuth[]>.class); 

ответ

0

Этого можно избежать, используя метод exchange() в объекте restTemplate, но потребуется несколько изменений, таких как преобразование вашего массива в List и передавая ParameterizedTypeReference с типом в качестве параметра (необходимо из-за стирания типа). Остальная часть аналогична ожидаемой:

ResponseEntity<List<LkAuth>> response = 
     restTemplate.exchange(lkAuthListUrl, 
        HttpMethod.GET, null, new ParameterizedTypeReference<List<LkAuth>>() {}); 
List<LkAuth> model = response.getBody(); 
Смежные вопросы