首页菜鸟笔记如何解决MySQL中 datetime 类型返回的Java LocalDateTime日期时间数据中带有T
Created At : 2021-12-28
Last Updated: 2021-12-28

如何解决MySQL中datetime类型返回的Java LocalDateTime日期时间数据中带有T

当我们Mysql数据库中的日期时间类型为datetime时,如果Java端使用LocalDateTime接收,通过JSON返回数据是,日期中会有讨厌的T。

例如数据库中为:2021-12-28 13:12:29, 会返回: 2021-12-28T13:12:29

如何解决呢? 有四种方案供参考:

yaml配置文件修改

spring:
  jackson:
    #格式化返回时间 yyyy-MM-dd HH:mm:ss
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

使用JsonFormat注解

@Data
public class BaseEntity implements Serializable {
  /**
   * 插入时自动充填
   */
  @TableField(value = "create_time",fill = FieldFill.INSERT)
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private LocalDateTime createTime;
  /**
   * 更新时自动充填
   */
  @TableField(value = "update_time",fill = FieldFill.UPDATE)
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
  private LocalDateTime updateTime;

}

MappingJackson2HttpMessageConverter全局处理

@Configuration
public class JacksonConfig {

    @Bean
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        converter.setObjectMapper(mapper);
        return converter;
    }

}


使用正则处理

// replace去掉T ;
当前时间.replace(/T/g, ' ').replace(/.[\d]{3}Z/, ' ')  

由于我的项目中定义了BaseEntity,因此使用了方法2,通过@JsonFormat注解进行处理。