簡體   English   中英

為什么DefaultJackson2JavaTypeMapper.toJavaType()不支持抽象類和接口作為推斷類型?

[英]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)是否更好? 也許添加一個啟用抽象類和接口支持的標志? 有什么我想念的嗎?

隨時打開“ 改善JIRA問題”

歡迎提供貢獻以及合適的測試用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM