说明
- 环境:SpringBoot3.0.2
- LocalDateTime本身用法可参考:【jdk1.8】LocalDateTime 详细用法,保姆级 - yīyáng - 博客园 ()
Jackson
依赖
默认引入spring-boot-starter-web,即自动引入Jackson;
配置ObjectMapper
import ;
import .;
import .;
import .;
import .;
import .;
import .;
import .;
import ;
import ;
import ;
import ;
import ;
import ;
/**
* jackson配置
*
* @author liaorj
* @date 2024/03/21
*/
@Configuration
public class JacksonConfig {
/**
* jackson配置ObjectMapper对LocalDateTime的序列化、反序列化
*
* @return
*/
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
// other serializer and deSerializer config ...
JavaTimeModule javaTimeModule = new JavaTimeModule();
(, new LocalDateSerializer(("yyyy-MM-dd")));
(, new LocalDateDeserializer(("yyyy-MM-dd")));
(, new LocalTimeSerializer(("HH:mm:ss")));
(, new LocalTimeDeserializer(("HH:mm:ss")));
(, new LocalDateTimeSerializer(("yyyy-MM-dd HH:mm:ss")));
(, new LocalDateTimeDeserializer(("yyyy-MM-dd HH:mm:ss")));
(javaTimeModule);
return objectMapper;
}
/*@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return jacksonObjectMapperBuilder -> {
(, new LocalDateSerializer(("yyyy-MM-dd")));
(, new LocalDateDeserializer(("yyyy-MM-dd")));
(, new LocalTimeSerializer(("HH:mm:ss")));
(, new LocalTimeDeserializer(("HH:mm:ss")));
(, new LocalDateTimeSerializer(("yyyy-MM-dd HH:mm:ss")));
(, new LocalDateTimeDeserializer(("yyyy-MM-dd HH:mm:ss")));
};
}*/
}
使用ObjectMapper
从spring容器中注入,才能生效,直接new的话本人试过,会报错。
@Resource
private ObjectMapper objectMapper;
使用@JsonFormat
- 直接使用该注解,不依赖上述配置;
- get出参、post出参和入参使用;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate date;
@JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
private LocalTime startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
使用@DateTimeFormat
- 直接使用该注解,不依赖上述配置;
- get入参使用;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate date;
配置RabbitMQ消息转换器
- 依赖上述ObjectMapper配置,否则格式化LocalDateTime字段异常;
- 在注册RabbitMQ消息转换器时,需传入ObjectMapper对象;
- 代码中的自动创建消息id设置,与本主题无关;
import ;
import .Jackson2JsonMessageConverter;
import ;
import ;
import ;
/**
* rabbitmq配置
*
* @author liaorj
* @date 2024/02/26
*/
@Configuration
public class RabbitMQConfig {
/**
* AMQP消息转换器,
* 原本是jdk序列化的,由于消息空间占用较大,且不友好,所以配置该转换器。
* 发送端和消费端都配置。
* @return
*/
@Bean
public MessageConverter messageConverter(ObjectMapper objectMapper) {
//定义消息转换器
Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter(objectMapper);
//配置自动创建消息id,用于识别不同消息,也可以在业务中基于id判断消息是否重复
(true);
return converter;
}
}
可能遇到的异常
以上没设置好,可能遇到的异常:
1、LocalDateTime格式化异常:
`` not supported by default: add Module ":jackson-datatype-jsr310"
2、RabbitMQ消息转换异常:
MessageConversionException: Failed to convert Message content]
FastJson
待续...