Java Spring Boot如何将GET请求ResponseEntity的日期格式化为yyyy-mm-dd?
解决Spring Boot LocalDate返回数组格式问题并适配Blazor DateOnly
方案一:实体类局部配置(单字段生效)
直接在Product实体的expirationDate字段上添加Jackson序列化注解,指定输出格式:
@Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; private String category; // 指定LocalDate序列化为yyyy-MM-dd格式的字符串 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDate expirationDate; // getters, setters ... }
配置后接口返回的expirationDate会变为"2023-01-22"格式的字符串,完全匹配Blazor DateOnly的默认解析规则,无需额外转换。
方案二:全局配置(所有LocalDate字段生效)
如果项目中有多个实体类使用LocalDate,可通过全局配置统一格式化规则,避免重复编码:
方式1:配置类实现
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.time.format.DateTimeFormatter; @Configuration public class JacksonDateConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); JavaTimeModule timeModule = new JavaTimeModule(); // 注册LocalDate的序列化器,指定格式 timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); mapper.registerModule(timeModule); return mapper; } }
方式2:配置文件实现(更简洁)
在application.yml中添加配置:
spring: jackson: date-format: yyyy-MM-dd serialization: write-dates-as-timestamps: false time-zone: GMT+8
或application.properties:
spring.jackson.date-format=yyyy-MM-dd spring.jackson.serialization.write-dates-as-timestamps=false spring.jackson.time-zone=GMT+8
Blazor端适配验证
Blazor的DateOnly类型默认支持ISO 8601标准的yyyy-MM-dd格式字符串,直接定义DTO类即可自动解析:
public class ProductDto { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public DateOnly ExpirationDate { get; set; } } // 调用API时自动映射 var products = await Http.GetFromJsonAsync<List<ProductDto>>("/products");
内容的提问来源于stack exchange,提问作者Turwaith
相关产品推荐
相关产品推荐

