日常开发中,时间格式的参数出现频率非常高,很多朋友对时间格式转换也很头疼,或者只知道如何配置,而不知道这些配置如何生效的。
创新互联公司是专业的苍南网站建设公司,苍南接单;提供做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行苍南网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!今天我们来梳理一下Springboot项目中配置日期转换的三种方式,以及其大致原理。
Springboot版本:2.7.6
1,全局配置(推荐)Spring提供了默认的jackson配置,我们只需修改Spring的默认配置,自定义对于日期参数的格式化方式即可。
新建一个配置类,构建一个自定义的ObjectMapper即可全局生效。
@Configuration
@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.setLocale(Locale.CHINA)
.setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()))
//注册一个序列化和反序列化的module
.registerModule(javaTimeModule())
//配置date格式参数的解析
.setDateFormat(new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN))
.setLocale(Locale.CHINA)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.findAndRegisterModules();
}
@Bean
public Module javaTimeModule() {
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(new LocalDateTimeSerializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)
));
module.addSerializer(new LocalTimeSerializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN))
);
module.addSerializer(new LocalDateSerializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))
);
module.addDeserializer(LocalDateTime.class,
new LocalDateTimeDeserializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)
));
module.addDeserializer(LocalDate.class,
new LocalDateDeserializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)
));
module.addDeserializer(LocalTime.class,
new LocalTimeDeserializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)
));
return module;
}
}
上述中的几项配置也比较简单,大家基本可以直接看出其作用,就不再一项项细说了。
另外大家可以注意到,自定义的类上使用了@AutoConfigureBefore(JacksonAutoConfiguration.class),他的目的在于提前构建ObjectMapper,这样当JacksonAutoConfiguration初始化时,使用的就是我们自定义的ObjectMapper,我们配置的格式化参数就可以生效了。
在JacksonAutoConfiguration中静态类JacksonObjectMapperConfiguration中,
大家可以看到,当ObjectMapper已经存在时,就不会再使用Spring默认的了。
@ConditionalOnMissingBean是一个很好用的注解,大家在开发自己的组件时也可以尝试通过他实现动态的组件注册。
关于如何找到Jackson配置的启动类,有的同学可能一开始不知道如何下手。
其实很简单,我们只要知道一个类是由Spring自动配置的,那么就去Spring的autoconfigure.jar包下找就行,在org.springframework.boot.autoconfigure下面,我们可以找到Jackson的包,JacksonAutoConfiguration就在其中。
除了Jackson的配置,其他自动配置的组件也可以在autoconfigure中找到。
2,通过@JsonFormat注解转换我们也可以在一个类的属性上使用@JsonFormat达到格式化参数的目的。
@Data
public class OutputDTO {
private String desc;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date date;
}
这种方式可以在需要的地方自由配置格式化方式,但是相对来说会增加许多工作,建议还是使用全局配置的方式。
3,yml配置文件自定义(不推荐)spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
需要注意的是,这种方式默认只对date生效,对于java8的LocalDate,LocalDateTime是不生效的。
对于为什么不生效感兴趣的朋友可以在JacksonAutoConfiguration的内部类Jackson2ObjectMapperBuilderCustomizerConfiguration中的customize.configureDateFormat方法中找到答案。
感谢您的点赞和关注。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站标题:Springboot全局配置自动格式化日期参数,超简单直接拿去用-创新互联
转载注明:http://scgulin.cn/article/cdhijc.html