spring mvc 中通过注册 converter 实现自定义日期格式转换,需实现 converter 接口并重写 webmvcconfigurer 的 addformatters 方法注册,控制器中即可直接使用 localdate 等参数接收并自动转换。

Spring MVC 中通过类型转换器(Converter)实现自定义日期格式转换,核心是注册一个 Converter<string localdate></string> 或 Converter<string date></string>,并让 Spring 在绑定请求参数时自动调用它。
定义日期类型转换器
创建一个实现 org.springframework.core.convert.converter.Converter 接口的类,指定源类型为 String、目标类型为你要支持的日期类型(如 LocalDate、LocalDateTime 或 Date)。
例如,将字符串转为 LocalDate,按 yyyy-MM-dd 格式解析:
@Component
public class StringToLocalDateConverter implements Converter<string localdate> {
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public LocalDate convert(String source) {
if (source == null || source.trim().isEmpty()) {
return null;
}
try {
return LocalDate.parse(source.trim(), formatter);
} catch (DateTimeParseException e) {
throw new IllegalArgumentException("无法解析日期: " + source, e);
}
}
}</string>
注册转换器到 WebMvcConfigurer
仅定义转换器还不够,需将其注册进 Spring 的转换服务。推荐在配置类中重写 addFormatters 方法:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToLocalDateConverter());
// 也可注册 LocalDateTime、Date 等其他转换器
}
}
注意:不要用 @Bean 直接注入 Converter,Spring Boot 2.0+ 默认使用 FormattingConversionService,必须通过 WebMvcConfigurer 注册才能生效。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
控制器中直接使用日期类型参数
注册成功后,Controller 方法可直接接收日期类型参数,Spring 会自动调用你定义的转换器:
@GetMapping("/events")
public String listByDate(@RequestParam LocalDate date) {
// date 已经是解析好的 LocalDate 对象
return "events";
}
若请求 URL 是 /events?date=2024-05-20,就会被正确转换;如果格式错误(如 2024/05/20),则抛出 IllegalArgumentException,触发默认的 400 错误响应。
支持多种格式或全局统一配置
如果需要支持多个日期格式(比如同时接受 yyyy-MM-dd 和 yyyyMMdd),可在转换器中尝试多个 DateTimeFormatter:
- 用数组或列表维护多个 formatter
- 依次尝试 parse,遇到第一个成功就返回
- 避免吞掉所有异常,保留原始错误信息便于调试
另外,若项目中大量使用相同格式,也可考虑用 @DateTimeFormat(pattern = "yyyy-MM-dd") 注解在字段或参数上,但那是注解驱动方式,和全局 Converter 不冲突,优先级略低。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










