在Spring Boot中格式化JSON日期

1.概述

如何在Spring Boot应用程序中格式化JSON日期字段。

使用Jackson格式化日期的各种方式,Jackson被Spring Boot用作其默认的JSON处理器。

2.在日期字段上使用@JsonFormat

2.1 设定格式

可以使用@JsonFormat注解以设置特定字段的格式:

@Data
public class Contact {
    @JsonFormat(pattern="yyyy-MM-dd")
    private LocalDate birthday;

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastUpdate;
}

在生日字段中,使用仅显示日期的模式,而在lastUpdate字段中还包含时间。

使用了Java 8日期类型,这对于处理时间类型非常方便。 如果需要使用java.util.Date类型,也可以通过相同的方式使用注解:

@Data
public class ContactWithJavaUtilDate {

    @JsonFormat(pattern="yyyy-MM-dd")
    private Date birthday;

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

}

最后,看一下通过使用具有给定日期格式的@JsonFormat呈现的输出:

{
    "birthday": "2021-04-15",
    "lastUpdate": "2021-04-15 04:08:02"
}

如上面所见,使用@JsonFormat注解是格式化特定日期字段的绝佳方法。

但是,仅当我们需要字段的特定格式时,才应使用它。 如果希望对应用程序中的所有日期都采用通用格式,那么有更好的方法来实现这一点。

2.2 设定时区

另外,如果需要使用特定的时区,可以设置@JsonFormat的timezone属性:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="Europe/Zagreb")
private LocalDateTime lastUpdate;

如果类型已经包含时区,例如java.time.ZonedDatetime,则无需使用它。

3.配置默认格式

尽管@JsonFormat本身具有强大的功能,但是对格式和时区进行硬编码可能会带来麻烦。

如果要为应用程序中的所有日期配置默认格式,一种更灵活的方法是在application.properties中配置它:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

尽管像这样设置默认格式非常方便和直接,但是这种方法还是有一个缺点。 它不适用于Java 8日期类型,例如LocalDate和LocalDateTime –只能使用它来格式化java.util.Date或java.util.Calendar类型的字段。

4.自定义Jackson的ObjectMapper

因此,要使用Java 8日期类型并设置默认日期格式,那么需要研究创建Jackson2ObjectMapperBuilderCustomizer bean:

@Configuration
public class ContactAppConfig {

    private static final String dateFormat = "yyyy-MM-dd";
    private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
        return builder -> {
            //java.util.Date类型时间格式化
            builder.simpleDateFormat(dateTimeFormat);
            builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
            builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
        };
    }

}

上面的示例显示了如何在应用程序中配置默认格式。 必须定义一个bean并覆盖它的customize方法来设置所需的格式。

尽管这种方法可能看起来有些麻烦,但它的优点是它适用于Java 8和旧式日期类型。

还以通过Jackson2ObjectMapperBuilder

@Configuration
public class ContactAppConfig {
    private static final String DATE_FORMAT = "yyyy-MM-dd";
    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    @Bean
    public Jackson2ObjectMapperBuilder jsonCustomizer() {
        Jackson2ObjectMapperBuilder builder
                = new Jackson2ObjectMapperBuilder();
        builder.simpleDateFormat(DATE_TIME_FORMAT);
        builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT)));
        builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_FORMAT)));

        return builder;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值