Spring Boot如何全局配置LocalDateTime日期格式
作者:letere
还在为每个LocalDateTime参数加注解烦恼吗?本文教你如何在Spring Boot中通过全局配置自动处理日期格式,无论是Get请求还是Post请求,都能轻松接收yyyy-MM-dd HH:mm:ss格式的日期,告别报错,提升开发效率
问题说明
Java接收LocalDateTime默认格式是yyyy-MM-ddTHH:mm:ss,而一般前后端交互日期字符串都是yyyy-MM-dd HH:mm:ss,导致后端用LocalDateTime接收日期时会出现报错
而通常的解决方法就是给接收的参数加上注解:
- params接收日期(Get请求):
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - body接收日期(Post请求):
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
然而给每个LocalDateTime参数都加上这个注解,会显得十分麻烦,所以直接弄一个全局配置自动处理
LocalDateTime全局配置
@Configuration
public class LocalDateTimeConfig {
/** 默认日期时间格式 */
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/** 默认日期格式 */
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/** 默认时间格式 */
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
@Bean
public ObjectMapper objectMapper(){
ObjectMapper objectMapper = new ObjectMapper();
JavaTimeModule javaTimeModule = new JavaTimeModule();
// 序列化
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
// 反序列化
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
objectMapper.registerModule(javaTimeModule).registerModule(new ParameterNamesModule());
return objectMapper;
}
@Bean
public Converter<String, LocalTime> localTimeConverter() {
return new Converter<>() {
@Override
public LocalTime convert(String source) {
return LocalTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT));
}
};
}
@Bean
public Converter<String, LocalDate> localDateConverter() {
return new Converter<>() {
@Override
public LocalDate convert(String source) {
return LocalDate.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT));
}
};
}
@Bean
public Converter<String, LocalDateTime> localDateTimeConverter() {
return new Converter<>() {
@Override
public LocalDateTime convert(String source) {
return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT));
}
};
}
}
只要在springboot创建这个配置类,无论是params接收(Get请求),还是body接收(Post请求),都能自动处理LocalDateTime数据,不需要每个参数都加上注解
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
