十念 发表于 4 天前

随记:有关Springboot项目中的时间格式实现的几种方式

1.注解

        @JsonFormat  @DateTimeFormat
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;

public class Event {

    // 序列化和反序列化时生效
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai",shape=)
    private LocalDateTime eventDate;

    // 仅在接收(反序列化)时生效 (从前端接收 JSON 数据转为 Java 对象)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdDate;

    // Getters and Setters


}


[*] 两个注解的优先级
[*]处理 JSON 数据:优先使用 @JsonFormat。
[*]处理表单数据或 URL 参数:优先使用 @DateTimeFormat。
[*]如果需要处理 两种场景(JSON + 表单),可以同时使用 @JsonFormat 和 @DateTimeFormat,根据详细场景生效。
@JsonFormat 提供多个配置参数,你可以根据需要灵活调解:


[*]shape:定义序列化的格式(如时间戳或字符串)。

[*]常用值:

[*]JsonFormat.Shape.STRING:将日期序列化为字符串格式。
[*]JsonFormat.Shape.NUMBER:将日期序列化为时间戳格式。


[*]pattern:定义日期格式字符串(如 yyyy-MM-dd HH:mm:ss)。
[*]timezone:指定时区(如 Asia/Shanghai 或 UTC)。
2.全局配置文件(yml)

spring:
jackson:
    serialization:
#是否转换成时间戳 false为否,这个时候可以加上日期格式
      write-dates-as-timestamps: false
    date-format: yyyy-MM-dd HH:mm:ss

#这是开启的
spring:
jackson:
    serialization:
      write-dates-as-timestamps: true
   

3.自定义配置文件

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
      ObjectMapper objectMapper = new ObjectMapper();

      // 设置全局日期格式
      objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

      // 注册 JavaTimeModule 以支持 Java 8 日期时间 API(如 LocalDateTime)
      objectMapper.registerModule(new JavaTimeModule());

      // 禁用时间戳序列化
      objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

      return objectMapper;
    }
}

详细的优先级就是 

注解 (@JsonFormat > @DateTimeFormat) > 全局格式的(自定义类> 配置yaml) 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 随记:有关Springboot项目中的时间格式实现的几种方式