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)