SpringBoot+MyBatis Plus对Map中Date格式转换的处理( 三 )


3. 修改 SpringBoot 配置增加配置 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss, 这种配置, 只对 Spring BeanFactory 中创建的 Jackson ObjectMapper有效, 例如 HTTP 请求和响应中对 Date 类型的转换

  1. spring:

  2.  ...

  3.  jackson:

  4.    date-format: yyyy-MM-dd HH:mm:ss

整体方案国内项目, 几乎都会希望落库时日期就是日期的样子(方便看数据库表), 所谓日期的样子就是yyyy-MM-dd HH:mm:ss格式的字符串. 如果怕麻烦, 就通通都用这个格式了.
这样统一存在的隐患是丢失毫秒部分. 这个问题业务人员基本上是不会关心的. 如果需要, 就在格式中加上.
第一是 Spring 配置, 这样所有的请求响应都统一了
  1. spring:

  2.  ...

  3.  jackson:

  4.    date-format: yyyy-MM-dd HH:mm:ss

第二是定义一个工具类, 把 ObjectMapper 自定义一下, 这样所有手工转换的地方也统一了, 注意留一个getObjectMapper()方法
  1. public class JacksonUtil {

  2.    private static final Logger log = LoggerFactory.getLogger(JacksonUtil.class);

  3.    private static final ObjectMapper MAPPER = createObjectMapper();

  4.    private JacksonUtil() {}

  5.    private static ObjectMapper createObjectMapper() {

  6.        ObjectMapper objectMapper = new ObjectMapper();

  7.        objectMapper.configure(JsonGenerator.Feature.AUTO_CLOSE_TARGET, false);

  8.        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

  9.        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  10.        objectMapper.setDateFormat(df);

  11.        return objectMapper;

  12.    }

  13.    public static ObjectMapper getObjectMapper() {

  14.        return MAPPER;

  15.    }

  16. }

第三是启动后修改 MyBatisPlus 的设置, 即下面的 changeObjectMapper() 这个方法, 直接换成了上面工具类中定义的 ObjectMapper, 这样在 MyBatis 读写数据库时的格式也统一了.
  1. @Configuration

  2. @MapperScan(basePackages = {"com.somewhere.commons.impl.mapper"})

  3. public class MybatisPlusConfig {

  4.    @Bean

  5.    public MybatisPlusInterceptor mybatisPlusInterceptor() {

  6.        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

  7.        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.POSTGRE_SQL));

  8.        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

    推荐阅读