gpt4 book ai didi

spring-mvc - 如何将通用集合类对象作为参数传递

转载 作者:行者123 更新时间:2023-12-03 23:48:40 24 4
gpt4 key购买 nike

我有基于 Spring MVC 的 RESTful 服务。该服务有一个 RESTful 资源方法,该方法返回以下响应:

public class OperationalDataResponse<T> {

private String status;
private String statusMessage;
private T result;
//getters and setters
}

这个响应对象封装了T类型的结果对象.

在客户端,我使用 RestTemplateGsonHttpMessageConverter添加。我从服务中得到的响应是 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> 的类对象?)

最佳答案

如果您知道 ResultType 以 List 的形式出现,那么它显然会像您所说的编译问题那样失败。为什么?因为当你的方法只接受一个值时你试图发送一个列表。为了克服这个问题,你必须将方法参数更改为以下内容

public OperationalDataResponse<RESULT_TYPE> getOperationalData(String resourcePath, Map<String, Object> urlVariables, List<Class<RESULT_TYPE>> resultType){
....
}

你必须对 getType() 方法做一些细微的修改,循环它然后将每个类值传递给 getType 方法,就像这样

for(MyNonGenericClass myClass:mylist){
getType(OperationalDataResponse.class, myClass.getClass());
}

关于spring-mvc - 如何将通用集合类对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com