Java Rest Client bodyToMono 泛型
Java Rest Client bodyToMono generic
我的应用程序有一些服务到不同的休息端点。逻辑总是一样的,所以我想使用继承和泛型来避免代码重复。但是一行(bodyToMono(E[].class)
)不起作用。是否有替代方案(也许是最佳实践方式),我没看到?
Parent 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();
}
}
Child Class:
@Configuration
@Service
public class UserService extends AbstractEntitiesRestService<User> {
@Value("${endpoint}")
protected String baseUrl;
@Override
protected String getBaseUrl(){
return baseUrl;
}
...
}
数组[]
不是类型,不能泛化
所以 T[].class
是一个错误,因为数组不是 class
.
您需要使用包含类型的 class,因为类型可以是通用的。例如 ArrayList
.
@Override
public List<T> getObjectsFromCustomQueryImpl(CustomQuery query) {
return jtWebClient.get()
.uri(getBaseUrl())
.retrieve()
.bodyToMono(new ParameterizedTypeReference<List<T>>() {})
.block();
}
ArrayList
是 List<T>
接口的实现。但是我们不能放置一个包含泛型的接口,List<T>.class
也不会工作所以 spring 有一个特定的 class ParameterizedTypeReference
是一个 class 将保存类型在 de/serialization.
期间为您提供的信息
我的应用程序有一些服务到不同的休息端点。逻辑总是一样的,所以我想使用继承和泛型来避免代码重复。但是一行(bodyToMono(E[].class)
)不起作用。是否有替代方案(也许是最佳实践方式),我没看到?
Parent 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();
}
}
Child Class:
@Configuration
@Service
public class UserService extends AbstractEntitiesRestService<User> {
@Value("${endpoint}")
protected String baseUrl;
@Override
protected String getBaseUrl(){
return baseUrl;
}
...
}
数组[]
不是类型,不能泛化
所以 T[].class
是一个错误,因为数组不是 class
.
您需要使用包含类型的 class,因为类型可以是通用的。例如 ArrayList
.
@Override
public List<T> getObjectsFromCustomQueryImpl(CustomQuery query) {
return jtWebClient.get()
.uri(getBaseUrl())
.retrieve()
.bodyToMono(new ParameterizedTypeReference<List<T>>() {})
.block();
}
ArrayList
是 List<T>
接口的实现。但是我们不能放置一个包含泛型的接口,List<T>.class
也不会工作所以 spring 有一个特定的 class ParameterizedTypeReference
是一个 class 将保存类型在 de/serialization.