bug回顾
使用RabbitMQ时,代码报错
Failed to convert Message content,异常类型class org.springframework.amqp.support.converter.MessageConversionException
检查MQ相关配置,似乎并没有问题
最终意识到是LocalDateTime的序列化问题,参考了StackOverflow的文章:stackoverflow.com/questions/5…
解决方案
修改配置类如下
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Configuration
public class MyRabbitConfig {
/**
* 消息转换器
*/
@Bean
public MessageConverter messageConverter(){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTimeSerializer localDateTimeSerializer = new LocalDateTimeSerializer(formatter);
LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(formatter);
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(LocalDateTime.class, localDateTimeSerializer);
module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(module);
return new Jackson2JsonMessageConverter(objectMapper);
}
}