问题描述:
在我做rabbitMq的防止消息丢失的治理过程中出现如下错误:
Java 8 date/time type `java.time.LocalDateTime` not supported by default:
解决方案
我用的实体类发消息,实体类中存在LocalDateTime类型的字段,而Message在传递的过程中需要进行序列化也不能转换Java 8 日期类型LocalDateTime,此时有两种解决办法(第二种最优雅)
- 通过引入依赖
在消息发送的代码中转换LocalDateTime类型<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.13.0</version> </dependency>
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); String s = objectMapper.writeValueAsString(direct);//实体类 try { rabbitTemplate.convertAndSend("direct","queue.routingKey",s,correlationData); } catch (AmqpException e) { }
这样可以解决问题不过每次发消息都需要加上如上代码很不方便。
-
通过全局配置LocalDateTime的序列化
/** * json序列化增强 解决Jackson序列化不了Java8日期 */ @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); }