Java Rest客户端BodyTomo无泛型
我的应用程序有一些到不同rest端点的服务。逻辑总是一样的,所以我想使用继承和泛型来避免代码重复。但是有一行(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
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();
}