I have a class like that:
public class Wrapper {
private String message;
private T data;
public String getMessage() {
return message;
}
The only thing I think you could do is creating a new class that extends Wrapper and uses model as a generic.
class WrapperWithModel extends Wrapper<Model>{};
WrapperWithModel response = restTemplate.getForObject(URL, WrapperWithModel.class);
It's not the best solution, but at least you won't have to unmarshall manually the response.
Do not use generics with RestTemplate. Wrap request and response object with wrapper object that will hide the generics.
ResponseEntity<Result>
response = restTemplate.postForEntity("/user", user, Result.class);
ObjectMapper objectMapper=new ObjectMapper();
String content = objectMapper.writeValueAsString(response.getBody().getData());
User user1 = objectMapper.readValue(content, User.class);
ParameterizedTypeReference has been introduced in 3.2 M2 to workaround this issue.
Wrapper<Model> response = restClient.exchange(loginUrl,
HttpMethod.GET,
null,
new ParameterizedTypeReference<Wrapper<Model>>() {}).getBody();
However, the postForObject/getForObject variant was not introduced.