Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Rest客户端BodyTomo无泛型_Java_Generics_Spring Webflux_Webclient - Fatal编程技术网

Java Rest客户端BodyTomo无泛型

Java Rest客户端BodyTomo无泛型,java,generics,spring-webflux,webclient,Java,Generics,Spring Webflux,Webclient,我的应用程序有一些到不同rest端点的服务。逻辑总是一样的,所以我想使用继承和泛型来避免代码重复。但是有一行(bodytomino(E[].class))不起作用。我看不出有没有其他选择(也许是最佳实践方式) 父类: @Configuration @Service public abstract class AbstractEntitiesRestService<E>{ protected abstract String getBaseUrl(); @Autowire

我的应用程序有一些到不同rest端点的服务。逻辑总是一样的,所以我想使用继承和泛型来避免代码重复。但是有一行(
bodytomino(E[].class)
)不起作用。我看不出有没有其他选择(也许是最佳实践方式)

父类:

@Configuration
@Service
public abstract class AbstractEntitiesRestService<E>{

   protected abstract String getBaseUrl();

   @Autowired
   @Qualifier("webClient")
   protected WebClient WebClient;

    @Override
    public E[] getObjectsFromCustomQueryImpl(CustomQuery query) {
        return jtWebClient.get()
                .uri(getBaseUrl())
                .retrieve()
                .bodyToMono(E[].class) <---- Error!
                .block();
    }
}
@配置
@服务
公共抽象类AbstractEntityRestService{
受保护的抽象字符串getBaseUrl();
@自动连线
@限定符(“网络客户端”)
受保护的网络客户端网络客户端;
@凌驾
公共E[]getObjectsFromCustomQueryImpl(CustomQuery查询){
返回jtWebClient.get()
.uri(getBaseUrl())
.retrieve()

.bodytomino(E[].class)数组
[]
不是一种类型,因此不能对其进行泛化

因此
T[].class
是一个错误,因为数组不是
class

您需要使用一个包含类型的类,因为类型可以是泛型的

@Override
public List<T> getObjectsFromCustomQueryImpl(CustomQuery query) {
    return jtWebClient.get()
            .uri(getBaseUrl())
            .retrieve()
            .bodyToMono(new ParameterizedTypeReference<List<T>>() {})
            .block();
}
@覆盖
公共列表getObjectsFromCustomQueryImpl(CustomQuery查询){
返回jtWebClient.get()
.uri(getBaseUrl())
.retrieve()
.BodyToNo(新的参数化类型引用(){})
.block();
}

ArrayList
List
接口的一个实现。但是我们不能放置一个包含泛型
List的接口。类
也不能工作,因此spring有一个特定的类
ParameterizedTypeReference
,它是一个在反序列化期间为您保存类型信息的类。

ParameterizedTypeReference成功了!已经找到了一些与此相关的示例解决方案,但它不起作用..显然是因为我使用了数组..感谢您的解释。
@Override
public List<T> getObjectsFromCustomQueryImpl(CustomQuery query) {
    return jtWebClient.get()
            .uri(getBaseUrl())
            .retrieve()
            .bodyToMono(new ParameterizedTypeReference<List<T>>() {})
            .block();
}