解决 Spring Boot 返回日期格式问题

springboot项目有个属性这样注解

@DateTimeFormat(pattern = "yyyy-MM-dd") private Date createTime;

表中是 `create_time` datetime DEFAULT NULL

只使用了 @DateTimeFormat 注解来处理输入格式,但没有配置输出格式。返回给前端还是 createTime: "2025-04-05T12:27:36.000+00:00" 而不是createTime: "2025-04-05" 。在 Spring Boot 中,返回给前端的日期格式需要另外配置。

解决方案

有以下几种方法可以解决:

方法1:使用 @JsonFormat 注解(推荐)

import com.fasterxml.jackson.annotation.JsonFormat;

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

方法2:全局配置(在 application.properties 或 application.yml 中)

对于 application.properties:

spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=GMT+8

对于 application.yml:

spring:
  jackson:
    date-format: yyyy-MM-dd
    time-zone: GMT+8

方法3:自定义 Jackson 配置

创建一个配置类:

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

@Configuration
public class JacksonConfig {
    
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        return objectMapper;
    }
}

推荐方案

推荐使用方法1(@JsonFormat 注解),因为它:

  1. 只影响特定字段

  2. 配置简单明了

  3. 不会影响其他日期字段的格式

如果项目中大部分日期字段都需要相同格式,则可以使用方法2进行全局配置。

注意事项

  • 确保你的项目中包含了 Jackson 依赖(Spring Boot web starter 默认包含)

  • 如果使用 Java 8 的日期时间 API(LocalDate 等),需要额外配置 JavaTimeModule

你可能感兴趣的:(spring,boot,后端,java)