我们在用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的源码。
欢迎大家关注我的微信公众号 您的关注就是我不懈的动力