• RabbitMQ传递序列化/反序列化自定义对象时踩坑


    问题1

    错误信息:

    java.lang.IllegalArgumentException: SimpleMessageConverter only supports String, byte[] and Serializable payloads, received: com.hmall.api.dto.CartRemoveDTO
    
    • 1

    错误信息提示:RabbitMQ默认的消息转换器SimpleMessageConverter 无法对自定义对象生效;
    解决方法:
    让自定义对象实现Serializable接口,并配置消息转换器生产者方和消费者方都要配置,如下所示:

        @Bean
        public MessageConverter messageConverter(){
            return new Jackson2JsonMessageConverter();
        }
    
    • 1
    • 2
    • 3
    • 4

    问题2

    错误信息:

    Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.hmall.api.dto.CartClearDTO` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
     at [Source: (String)"{"userId":1,"itemIds":[1533902]}"; line: 1, column: 2]
    	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1904) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1349) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1415) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674) ~[jackson-databind-2.13.5.jar:2.13.5]
    	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629) ~[jackson-databind-2.13.5.jar:2.13.5]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    错误提示在jackson方式反序列化时出现了错误,查阅得知,自定义对象只添加了@Data注解,而jackson的反序列化需要无参构造函数,
    解决方法:
    给自定义对象添加@NoArgsConstructor注解或者配置无参构造器。

    参考链接:Jackson反序列化报错

  • 相关阅读:
    【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题
    【Linux】 ubuntu OpenCV环境搭建
    【matplotlib基础】--结合地图
    MoeCTF2023web
    Vue开发中常用的 js处理数组的方法
    立体仓库货物识别率99.9%!AI让仓储管理事半功倍
    Python Numpy中范数norm
    PEO-PPO-SS-DTX聚合物胶束|PEG-PEI-PCL-SS-PLL|聚己内酯-紫杉醇高分子前药PTX-PCL(科研试剂)
    AndroidStudio activity-1.8.0.aar依赖报错
    Python速成1——环境搭建与基本数据类型
  • 原文地址:https://blog.csdn.net/Mr_Richard/article/details/138096124