[英]Why doesn't DefaultJackson2JavaTypeMapper.toJavaType() support abstract classes and interfaces as inferred types?
我想使用spring-amqp(1.7.4)通过RabbitMQ将JSON格式的消息从一个Java应用程序发送到另一个Java应用程序。 这两个应用程序不共享相同的域模型类。
我在接收端有一个通用的@RabbitListener
批注方法,该方法采用Event
类型的单个参数(接口)。
我已经正确配置了Jackson来处理双方的事件类型层次结构,但是,由于DefaultJackson2JavaTypeMapper
不支持推断的抽象类或接口,spring-rabbit不会将我的JSON消息转换为正确的类型。
如果我定义了一个扩展DefaultJackson2JavaTypeMapper
的自定义JavaTypeMapper
并执行以下操作,则可以很好地工作:
@Override
public JavaType toJavaType(MessageProperties properties) {
boolean hasInferredTypeHeader = hasInferredTypeHeader(properties);
if (hasInferredTypeHeader && getTypePrecedence().equals(TypePrecedence.INFERRED)) {
// do not check for abstract classes and interfaces here
JavaType targetType = fromInferredTypeHeader(properties);
return targetType;
}
return super.toJavaType(properties);
}
让用户负责转换的方式(使用spring-rabbit约定或直接使用Jackson)是否更好? 也许添加一个启用抽象类和接口支持的标志? 有什么我想念的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.