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

问题1

错误信息:

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

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

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

问题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]

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

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

相关推荐

  1. RabbitMQ传递序列/序列定义对象

    2024-04-23 09:10:06       38 阅读
  2. 【Kotlin】定义Json序列

    2024-04-23 09:10:06       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 09:10:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 09:10:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 09:10:06       87 阅读
  4. Python语言-面向对象

    2024-04-23 09:10:06       96 阅读

热门阅读

  1. Edge浏览器的深度探索与使用心得

    2024-04-23 09:10:06       41 阅读
  2. LRU缓存(哈希+双链表)

    2024-04-23 09:10:06       44 阅读
  3. Spring Cloud 面试题(七)

    2024-04-23 09:10:06       37 阅读
  4. 在 Oracle 数据库中使用正则表达式

    2024-04-23 09:10:06       37 阅读
  5. 【Web前端笔记14】函数与对象

    2024-04-23 09:10:06       37 阅读
  6. IDM激活_powershelll

    2024-04-23 09:10:06       34 阅读
  7. MyBatis 面试题(六)

    2024-04-23 09:10:06       30 阅读
  8. IDM的实用功能

    2024-04-23 09:10:06       32 阅读
  9. markdown语法转换成html渲染到页面

    2024-04-23 09:10:06       40 阅读