最美的时光|3种Springboot全局时间格式化方式,提高开发效率利器
时间格式化在项目中使用频率是非常高的 , 当我们的 API 接口返回结果 , 需要对其中某一个 date 字段属性进行特殊的格式化处理 , 通常会用到 SimpleDateFormat 工具处理 。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Date stationTime = dateFormat.parse(dateFormat.format(PayEndTime()));
可一旦处理的地方较多 , 不仅 CV 操作频繁 , 还产生很多重复臃肿的代码 , 而此时如果能将时间格式统一配置 , 就可以省下更多时间专注于业务开发了 。
可能很多人觉得统一格式化时间很简单啊 , 像下边这样配置一下就行了 , 但事实上这种方式只对 date 类型生效 。
spring.jackson.date-format=yyyy-MM-dd HH:mm:ssspring.jackson.time-zone=GMT+8
而很多项目中用到的时间和日期API 比较混乱 ,java.util.Date 、 java.util.Calendar 和 java.time LocalDateTime 都存在 , 所以全局时间格式化必须要同时兼容性新旧 API 。
看看配置全局时间格式化前 , 接口返回时间字段的格式 。
@Datapublic class OrderDTO {private LocalDateTime createTime;private Date updateTime;}
很明显不符合页面上的显示要求(有人抬杠为啥不让前端解析时间 , 我只能说睡服代码比说服人容易得多~)
未做任何配置的结果
一、@JsonFormat 注解@JsonFormat 注解方式严格意义上不能叫全局时间格式化 , 应该叫部分格式化 , 因为@JsonFormat 注解需要用在实体类的时间字段上 , 而只有使用相应的实体类 , 对应的字段才能进行格式化 。
@Datapublic class OrderDTO {@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")private LocalDateTime createTime;@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;}
字段加上 @JsonFormat 注解后 , LocalDateTime 和 Date 时间格式化成功 。
@JsonFormat 注解格式化
二、@JsonComponent 注解(推荐)这是我个人比较推荐的一种方式 , 前边看到使用 @JsonFormat 注解并不能完全做到全局时间格式化 , 所以接下来我们使用 @JsonComponent 注解自定义一个全局格式化类 , 分别对 Date 和 LocalDate 类型做格式化处理 。
@JsonComponentpublic class DateFormatConfig {@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")private String pattern;/*** @author xiaofu* @description date 类型全局时间格式化* @date 2020/8/31 18:22*/@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilder() {return builder -> {TimeZone tz = TimeZone.getTimeZone("UTC");DateFormat df = new SimpleDateFormat(pattern);df.setTimeZone(tz);builder.failOnEmptyBeans(false).failOnUnknownProperties(false).featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).dateFormat(df);};}/*** @author xiaofu* @description LocalDate 类型全局时间格式化* @date 2020/8/31 18:22*/@Beanpublic LocalDateTimeSerializer localDateTimeDeserializer() {return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));}@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());}}
推荐阅读
- 美食工坊|而有一个很唯美的名字,日本仍保留使用,古代的苹果不叫“苹果”
- 财经锐眼|背后有何玄机?,美的董事长大笔套现近14亿
- 【皮裤】初秋穿皮裤千万别搭配这3种鞋子,拉低身高不说,还特别土气
- 穿搭:文雅甜美的穿搭,显瘦有气质
- 中国经济周刊|美的方洪波减持,格力董明珠增持,空调价格战一触即发?
- 今年8月|【聚焦增减持】中期业绩失守 小家电反攻 美的集团突遭股东减持31亿!
- 爱库存与美的达成战略合作,共建新电商生态
- 龙之队|Windows10上触控板失灵的3种解决方案
- 最美的时光|重点项目建设巡礼 | 顺丰水果仓落地杨凌 一起感受速度与“寄”情
- 美的集团|美的集团成立新公司 经营范围包括建筑楼宇智慧化及控制系统等