Spring Boot中如何统一配置Date类型变量的接收格式(无需逐字段加注解)
全局统一Date类型请求参数格式化方案
不需要给每个Date字段单独添加@JsonFormat注解,直接通过以下两种全局配置方式就能实现统一解析规则:
1. 配置文件快速配置(Spring Boot 2.x+适用)
在项目的application.yml中添加全局Jackson配置:
spring: jackson: date-format: dd-MM-yyyy HH:mm:ss time-zone: Asia/Tokyo
如果习惯用application.properties,则对应配置:
spring.jackson.date-format=dd-MM-yyyy HH:mm:ss spring.jackson.time-zone=Asia/Tokyo
配置生效后,所有通过@RequestBody接收的Date类型字段都会自动按指定格式解析,同时接口返回的Date类型数据也会用该格式序列化。
2. 自定义Jackson配置类(灵活扩展场景)
如果需要更精细的控制(比如仅对请求解析生效、不影响返回序列化,或者兼容Java 8的时间类型),可以编写配置类替换默认的ObjectMapper:
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 org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.text.SimpleDateFormat; import java.util.TimeZone; @Configuration public class JacksonGlobalConfig { @Bean public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.build(); // 配置Date类型的全局解析/序列化格式及时区 SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); objectMapper.setDateFormat(dateFormat); // 兼容Java 8 LocalDateTime等时间类型(可选) objectMapper.registerModule(new JavaTimeModule()); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return objectMapper; } }
这个配置会全局覆盖默认的Jackson解析规则,优先级高于配置文件。如果个别字段需要特殊格式,单独添加@JsonFormat注解即可,它会覆盖全局配置。
注意事项
- 格式字符串里的
MM代表两位月份,mm是分钟,注意别混淆,你的需求里dd-mm-yyyy应该是笔误,实际要表示月份的话用dd-MM-yyyy。 - 时区
Asia/Tokyo必须设置正确,否则会出现时间偏移问题。
内容的提问来源于stack exchange,提问作者Quốc Kiệt
相关产品推荐
相关产品推荐

