我正在使用spring泛型转换服务来构造请求和响应,以进行SOAP/REST API调用。
我有两个转换器,它接受一个通用的java类作为输入,并将它们转换为相同的响应java类。spring的类型描述符用来解析参数类型,spring转换器调用适当的转换器类。
但这不适用于用户定义的泛型类。下面是我的语法。
public class PairAConverter extends
ConversionServiceAwareConverter<Pair<ClassA, Param>, Response> {
public class PairBConverter extends
ConversionServiceAwareConverter<Pair<ClassB, Param>, Response> {现在,当我使用以下语法调用转换器时:
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类,但不能用于用户定义的泛型类。
有没有办法通过类型描述符来获取泛型类的完整类细节?
发布于 2018-03-23 06:31:57
不幸的是,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));https://stackoverflow.com/questions/39047033
复制相似问题