开发环境
- JDK 1.8
- SpringBoot2.2.1
- Maven 3.2+
- Mysql5.7.36
- 开发工具
- IntelliJ IDEA
- smartGit
背景
在我之前的博客中,有对Springboot2.0集成Mybatis Plus做了比较详细的描述,现在这篇博客介绍,基于开源的jackson api来自定义ObjectMapping(对象映射器),实现对实体类中的日期数据,统一格式化处理
问题描述
我们定义一个实体类
@Data
public class UserDO {@TableId(type = IdType.ASSIGN_ID)private Long id;private String name;private Integer age;private String email;@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime modifyTime;}
通过mybatisplus统一写好接口,返回,这个LocalDateTime
的日期都是如图所示这样的,所以都需要手工格式化处理
解决方案
在jackson中,可以通过自定义ObjectMapping实现对日期格式的数据统一处理,通过Jackson2ObjectMapperBuilderCustomizer
统一对LocalDate
和LocalDateTime
做格式化处理
package com.example.mybatisplus.configuration;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.time.format.DateTimeFormatter;@Configuration
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusConfiguration {private static final String dateFormat = "yyyy-MM-dd";private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";@Bean@ConditionalOnProperty(value = "spring.jackson.date-format", matchIfMissing = true, havingValue = "none")public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {return builder -> builder.serializationInclusion(JsonInclude.Include.NON_NULL).simpleDateFormat(dateTimeFormat).serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat))).serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));}}