【发布时间】:2018-09-27 13:48:51
【问题描述】:
我有基于 Spring MVC 的 RESTful 服务。 该服务有一个返回以下响应的 RESTful 资源方法:
public class OperationalDataResponse<T> {
private String status;
private String statusMessage;
private T result;
//getters and setters
}
这个响应对象封装了T类型的结果对象。
在客户端,我使用RestTemplate 并添加了GsonHttpMessageConverter。
我以ResponseEntity 的形式收到服务的回复
我使用运行时Type 处理通用响应,如下所示:
public class OperationalDataRestClient<REQ,RESULT_TYPE> {
public OperationalDataResponse<RESULT_TYPE> getOperationalData(String resourcePath, Map<String, Object> urlVariables, Class<RESULT_TYPE> resultType) {
//code to invoke service and get data goes here
String responseString = responseEntity.getBody();
response = GsonHelper.getInstance().fromJson(responseString, getType(OperationalDataResponse.class, resultType));
}
Type getType(final Class<?> rawClass, final Class<?> parameter) {
return new ParameterizedType() {
@Override
public Type[] getActualTypeArguments() {
return new Type[] { parameter };
}
@Override
public Type getRawType() {
return rawClass;
}
@Override
public Type getOwnerType() {
return null;
}
};
}
}
只要我的resultType 是非收藏类,这就像一个魅力。
所以,这在调用者代码中效果很好:
getOperationalData(someResourcePath, someUrlVariables, MyNonGenericClass.class)
但是,如果我的 resultType 是一个集合(例如,List<String> 或 List<MyNonGenericClass>)
那么我不知道如何从调用者代码中传递resultType 类。
例如,来自调用者代码,
getOperationalData(someResourcePath, someUrlVariables, List.class)
或
getOperationalData(someResourcePath, someUrlVariables, List<MyNonGenericClass>.class)
引发编译错误。
我也尝试过传递ArrayList.class,但这也不起作用。
任何建议如何将通用集合作为resultType 从调用者代码传递(换句话说,例如,我如何从调用者代码传递List<String> 或List<MyNonGenericClass> 的类对象?)
【问题讨论】:
标签: spring-mvc generics methods collections types