Spring boot 全局日期格式化

测试类

@Data
public class FormatTime {

    private LocalDateTime startTime;

    private Date endTime;
}

控制器

@RestController
public class TestController {
    @GetMapping("/test")
    public Object test() {
        FormatTime formatTime = new FormatTime();
        formatTime.setStartTime(LocalDateTime.now());
        formatTime.setEndTime(new Date());
        return formatTime;
    }
}

1. 未经过格式化

访问localhost:8080/test 将会返回以下结果

{
  "endTime": 1587089043726,
  "startTime": "2020-04-17T10:04:03.726"
}

2.使用 @JsonFormat 注解

使用@JsonFormat注解格式化时间,应该算是一个基本操作了,大部分开发者都应用此种方式,简单方便。

@Data
public class FormatTime {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}

返回结果

{
  "startTime": "2020-04-17 10:21:31",
  "endTime": "2020-04-17 10:21:31"
}

3. 全局配置 (1)

配置全局日期格式化处理类

@Configuration
public class LocalDateTimeSerializerConfig {

    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;

    @Bean
    public LocalDateTimeSerializer localDateTimeDeserializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    }
}

返回结果

{
  "startTime": "2020-04-17 10:23:29",
  "endTime": "2020-04-17T02:23:29.136+0000"
}

这种方式可支持Date类型和LocalDateTime类型并存,那么有一个问题就是现在全局时间格式是yyyy-MM-dd HH:mm:ss,但有的字段却需要yyyy-MM-dd格式咋整?

那就需要配合@JsonFormat注解使用,在特定的字段属性添加@JsonFormat注解即可

3. 全局配置 (2)

application.properties中配置

#返回日期格式化
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#接受参数日期格式化
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss

返回结果

{
  "startTime": "2020-04-17T10:36:33.922",
  "endTime": "2020-04-17 10:36:33"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot提供了多种方式来进行时间格式化。其中,推荐使用全局时间格式化或局部时间格式化的方式。全局时间格式化可以通过简单的配置来完成,无需修改核心业务代码。具体实现方式有两种: 第一种是在Spring Boot的配置文件中添加以下配置: ``` spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 ``` 这样配置后,所有的时间字段都会按照指定的格式进行格式化。 第二种是在需要格式化时间的地方使用注解进行局部时间格式化。可以使用`@JsonFormat`注解来指定时间的格式,例如: ```java @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; ``` 这样配置后,只有`createTime`字段会按照指定的格式进行格式化。 需要注意的是,第二种方式只对`Date`类型的字段生效,对于其他类型的时间字段,需要使用第一种方式进行全局配置。\[1\]\[2\] 总结起来,如果是Spring Boot项目,推荐使用全局时间格式化或局部时间格式化的方式来进行时间格式化全局时间格式化可以通过在配置文件中添加配置来实现,而局部时间格式化可以通过在需要格式化时间的字段上使用`@JsonFormat`注解来实现。这样可以方便地完成时间的格式化功能,而无需修改核心业务代码。\[1\]\[2\] #### 引用[.reference_title] - *1* [SpringBoot时间格式化的5种方法!](https://blog.csdn.net/sufu1065/article/details/119122709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [3种 Springboot 全局时间格式化方式,别再写重复代码了](https://blog.csdn.net/xinzhifu1/article/details/108324241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SpringBoot时间格式化的5种方法,时间格式化就是这么简单](https://blog.csdn.net/weixin_44016938/article/details/126382747)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值