首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户定义泛型类的Spring TypeDescriptor

用户定义泛型类的Spring TypeDescriptor
EN

Stack Overflow用户
提问于 2016-08-20 04:14:24
回答 1查看 2.1K关注 0票数 1

我正在使用spring泛型转换服务来构造请求和响应,以进行SOAP/REST API调用。

我有两个转换器,它接受一个通用的java类作为输入,并将它们转换为相同的响应java类。spring的类型描述符用来解析参数类型,spring转换器调用适当的转换器类。

但这不适用于用户定义的泛型类。下面是我的语法。

代码语言:javascript
复制
public class PairAConverter extends
    ConversionServiceAwareConverter<Pair<ClassA, Param>, Response> {

public class PairBConverter extends
    ConversionServiceAwareConverter<Pair<ClassB, Param>, Response> {

现在,当我使用以下语法调用转换器时:

代码语言:javascript
复制
Pair<ClassA, Param> pairA = Pair.of(classAObject, param);

TypeDescriptor fromType = TypeDescriptor.forObject(pairA); 

Response finalResponse = (Response) conversionService.convert(pairA, fromType,
    TypeDescriptor.valueOf(Response.class));

由于类型擦除,运行时调用对Pair类中的对象类型没有任何指示,并且总是调用错误的转换器。我认为这可用于Collection类,但不能用于用户定义的泛型类。

有没有办法通过类型描述符来获取泛型类的完整类细节?

EN

回答 1

Stack Overflow用户

发布于 2018-03-23 06:31:57

不幸的是,TypeDescriptor不支持自定义对象中的泛型,它支持集合/映射中的泛型。您可以做的是,使用泛型类型调用受保护的org.springframework.core.convert.TypeDescriptor#TypeDescriptor(org.springframework.core.ResolvableType, java.lang.Class<?>, java.lang.annotation.Annotation[])构造函数:

代码语言:javascript
复制
Constructor<TypeDescriptor> constructor = TypeDescriptor.class.getConstructor(ResolvableType.class, Class.class, Annotation[].class);
ResolvableType resolvableType = ResolvableType.forClassWithGenerics(Pair.class, ClassA.class, Param.class);
TypeDescriptor fromType = constructor.newInstance(resolvableType, Pair.class, null); //Assuming Pair doesn't have any annotations

然后,您可以使用您的方法:

代码语言:javascript
复制
Response finalResponse = (Response) conversionService.convert(pairA, fromType,
TypeDescriptor.valueOf(Response.class));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39047033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档