【发布时间】:2017-11-11 21:54:57
【问题描述】:
我目前使用 Google 的 GSON 库来序列化/反序列化休息服务响应。
但我有一个小问题。我的响应对象有T response 属性。
public class IninalResponse<T> {
private int httpCode;
private String description;
private T response;
private HashMap<String,String> validationErrors;
...
}
我想根据我指定的对象类型获取response 属性。在这个例子中,我使用GetAccessTokenResponse 指定反序列化下面代码中的T response 属性。
public IninalResponse getAccessToken(String apikey) {
String path = "https://sandbox-api.ininal.com/v2/oauth/accesstoken";
return doPostIninal(apikey,path,null,GetAccessTokenResponse.class);
}
GSON library 成功反序列化 IninalResponse 对象,T response 字段除外。 Gson 将其反序列化为 LinkedTreeMap 类型对象。
public <T,V> IninalResponse doPostIninal(String apikey, String path,V requestBody, T response) {
RestTemplate template = restClient.getRestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.AUTHORIZATION,apikey);
headers.add(HttpHeaders.DATE, "");
headers.add(HttpHeaders.CONTENT_TYPE, "application/json");
HttpEntity<?> request = new HttpEntity<Object>(requestBody,headers);
ResponseEntity<String> accessTokenResponse = restClient.getRestTemplate().postForEntity(path,request,String.class);
IninalResponse<T> responseBody = new IninalResponse<T>();
responseBody = new Gson().fromJson(accessTokenResponse.getBody(),responseBody.getClass());
System.out.println(accessTokenResponse);
return responseBody;
}
我仍然不知道为什么 gson 不能反序列化?我到底错过了什么?
【问题讨论】:
-
试一试:public
IninalResponse getAccessToken(String apikey) 并始终将方法的结果分配给类型化对象,例如: InitialResponse v = getac
标签: java rest generics gson json-deserialization