Java 用户定义的泛型类的Spring TypeDescriptor

Java 用户定义的泛型类的Spring TypeDescriptor,java,spring,generics,type-erasure,Java,Spring,Generics,Type Erasure,我使用spring通用转换服务来构造请求和响应,以进行SOAP/RESTAPI调用 我有两个转换器,它们接受一个通用java类作为输入,并将它们转换为相同的响应java类。Spring的类型描述符固有地用于解析参数类型,Spring转换器调用适当的转换器类 但这不适用于用户定义的泛型类。下面是我的语法 public class PairAConverter extends ConversionServiceAwareConverter<Pair<ClassA, Param&g

我使用spring通用转换服务来构造请求和响应,以进行SOAP/RESTAPI调用

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

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

public class PairAConverter extends
    ConversionServiceAwareConverter<Pair<ClassA, Param>, Response> {

public class PairBConverter extends
    ConversionServiceAwareConverter<Pair<ClassB, Param>, Response> {
公共类PairAConverter扩展
ConversionServiceWareConverter{
公共类PairBConverter扩展
ConversionServiceWareConverter{
现在,当我使用以下语法调用转换器时:

Pair<ClassA, Param> pairA = Pair.of(classAObject, param);

TypeDescriptor fromType = TypeDescriptor.forObject(pairA); 

Response finalResponse = (Response) conversionService.convert(pairA, fromType,
    TypeDescriptor.valueOf(Response.class));
pairA=Pair.of(类对象,参数);
TypeDescriptor fromType=TypeDescriptor.forObject(pairA);
Response finalResponse=(Response)conversionService.convert(pairA,fromType,
TypeDescriptor.valueOf(Response.class));
由于类型擦除,运行时调用没有任何关于
类中对象类型的指示,并且一直调用错误的转换器。我发现这适用于集合类,但不适用于用户定义的泛型类


有没有办法通过类型描述符获取泛型类的完整类详细信息?

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

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
Response finalResponse = (Response) conversionService.convert(pairA, fromType,
TypeDescriptor.valueOf(Response.class));