java - 为什么 DefaultJackson2JavaTypeMapper.toJavaType() 不支持抽象类和接口(interface)作为推断类型?

标签 java json spring spring-amqp

我想使用 spring-amqp (1.7.4) 通过 RabbitMQ 将 JSON 格式的消息从一个 Java 应用程序发送到另一个 Java 应用程序。这两个应用程序不共享相同的域模型类。

我在接收端有一个通用的 @RabbitListener 注释方法,它采用 Event 类型的单个参数(一个接口(interface))。

我已经正确配置了 Jackson 来处理两侧的事件类型层次结构,但是,spring-rabbit 不会将我的 JSON 消息转换为正确的类型,因为 DefaultJackson2JavaTypeMapper 不支持推断的抽象类或接口(interface)。

如果我定义一个扩展 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)不是更好吗?也许添加一个启用抽象类和接口(interface)支持的标志?我有什么遗漏的吗?

最佳答案

欢迎打开 Improvement JIRA Issue .

Contributions are welcome以及合适的测试用例。

关于java - 为什么 DefaultJackson2JavaTypeMapper.toJavaType() 不支持抽象类和接口(interface)作为推断类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46568632/

相关文章:

java - 从本地机器到tomcat部署的webapp的InputStream

java - Spring 3.2 测试,com.jajway 不包含在依赖项中

json - 如何在 Scala 中将 Map 序列化为 JSON?

java - 实现新接口(interface)时出现 NoSuchBeanDefinitionException

java - 在Sqlserver中使用3des加密并使用java解密

java - Hibernate View 映射

java - Servlet = 服务器 Applet?

php - 插入前检查数据库中是否存在Random

spring - 在 TestRestTemplate 中启用 Cookie 和重定向

java - 如何在@WebMvcTest测试中忽略@EnableWebSecurity注释的类