SpringBoot Jackson Date类型格式设置

简介: SpringBoot Jackson Date类型格式设置一、背景说明在使用SpringBoot+SpringMVC时,默认采用Jackson包来进行JSON转换。在返回Date类型的数据时,Jackson会以时间戳的形式返回,而实际场景往往需要以yyyy-MM-dd HH:mm:ss这类日期或时间格式返回。

SpringBoot Jackson Date类型格式设置

一、背景说明

在使用SpringBoot+SpringMVC时,默认采用Jackson包来进行JSON转换。

在返回Date类型的数据时,Jackson会以时间戳的形式返回,而实际场景往往需要以yyyy-MM-dd HH:mm:ss这类日期或时间格式返回。

二、解决方案

有几种方式可以对Date格式进行设置:

  1. 在application.properties中做全局配置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.jackson.serialization.write-dates-as-timestamps=false

这种方式只对 date 类型生效

  1. 在单个实体类的属性上面使用@JsonFormat注解

如果你的Date类型要返回一个非yyyy-MM-dd HH:mm:ss格式的信息,则需要使用@JsonFormat注解

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;

采用@JsonComponent注解,来实现JsonSerializer和JsonDeserializer使用 @JsonFormat 注解并不能完全做到全局时间格式化,所以接下来我们使用 @JsonComponent 注解自定义一个全局格式化类,分别对 DateLocalDate 类型做格式化处理。

@JsonComponent
public class DateFormatConfig {
    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;
    @Bean
    public 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);
        };
    }
    @Bean
    public LocalDateTimeSerializer localDateTimeDeserializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    }
}

全局配置之后对于某些字段不希望使用这样的格式,则对此字段额外设置@JsonFormat即可,这个注解的优先级更高

参考自:3种 Springboot 全局时间格式化方式,别再写重复代码了

相关文章
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
89 0
|
1月前
|
JSON 前端开发 Java
SpringBoot中Date格式化处理
日期格式化处理:从混乱到清晰,轻松转换日期格式
86 1
|
1月前
|
Java Spring
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
Springboot+jpa如何设置启动项目表不存在就主动创建,字段没有就新增
180 0
|
1月前
|
Java 数据库 数据安全/隐私保护
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
267 1
|
5天前
|
Java
springboot解决jackson序列化Long类型精度失效问题
springboot解决jackson序列化Long类型精度失效问题
5 0
|
6天前
|
Java
springboot集成swagger2并分组全局设置Authorization
springboot集成swagger2并分组全局设置Authorization
16 0
|
1月前
|
前端开发 Java 程序员
Spring Boot统一功能处理(拦截器, 统一数据返回格式, 统一异常处理)
Spring Boot统一功能处理(拦截器, 统一数据返回格式, 统一异常处理)
34 1
|
1月前
|
前端开发 Java
在springboot项目中实现将上传的jpg图片类型转为pdf并保存到本地
使用uniapp的uni.canvasToTempFilePath方法,将canvas内容转为jpg并上传至服务器。后端接收到jpg文件后,通过Java的PDFBox库进行处理。代码包括:选取画板内容为jpg,转换为临时文件路径,基于此路径生成File对象并上传,服务器端利用PDFBox处理上传的jpg文件。依赖:PDFBox 2.0.8。
26 3
|
1月前
|
JSON fastjson Java
Spring Boot Jackson 和Fast JSON 用哪个好啊 ?
【4月更文挑战第22天】
128 1
|
1月前
|
XML JSON Java
[AIGC] 在Spring Boot中指定请求体格式
[AIGC] 在Spring Boot中指定请求体格式
231 0