我们在用RabbitMq 传递参数的时候通常的做法就是 RabbitMqTemplete对象里的这个方法
@Override
public void convertAndSend(String exchange, String routingKey, final Object object) throws AmqpException {
convertAndSend(exchange, routingKey, object, (CorrelationData) null);
}
如果我们传递的Object中的字段有LocalDateTime类型的话就会报错。
原因就是在序列化的时候有问题。
RabbitMq序列化用到的对象
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
要对这个Jackson2JsonMessageConverter做一些增强
@Bean
public MessageConverter messageConverter() {
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
om.registerModule(new JavaTimeModule());
return new Jackson2JsonMessageConverter(om);
}
这样就可以解决这个问题了。
Jackson2JsonMessageConverter在序列化的时候用到的ObjectMapper,默认是直接new了一个新的ObjectMapper,没有对它的属性经行任何的设置,我们手动增加一些设置这样可以使的ObjectMapper可以序列化LocalDateTime。有兴趣的同学可以去看一下ObjectMapper的源码。
欢迎大家关注我的微信公众号 您的关注就是我不懈的动力

在使用RabbitMQ传递包含LocalDateTime字段的对象时,会遇到序列化错误。原因是Jackson2JsonMessageConverter默认配置不支持LocalDateTime。为解决此问题,需要自定义MessageConverter,对Jackson2JsonMessageConverter的ObjectMapper进行配置,包括设置可见性和禁用将日期写为时间戳,然后注册JavaTimeModule。这样可以确保ObjectMapper能够正确序列化LocalDateTime类型。
1878

被折叠的 条评论
为什么被折叠?



