我就是奇迹

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

@DateTimeFormat 和 Formatter 都用于在 Spring 中进行 字符串与 Java 类型之间的格式转换,尤其常用于处理日期类型。但它们的用途、灵活性和使用方式有所不同。

 


 

 

🆚 核心区别对比

 

对比项

@DateTimeFormat 注解

Formatter 接口

📌 适用范围

主要用于日期时间类型(Date、LocalDate 等)

可用于任何类型(日期、数字、枚举、自定义类等)

🛠 使用方式

注解在字段、参数上

实现类并注册到 FormatterRegistry

📚 灵活性

限于一些内置格式(通过 pattern 指定)

可实现复杂、自定义的解析和格式化逻辑

🔄 控制方向

控制单个字段的转换

控制整个类型的转换

🧰 配合场景

简单字段,如表单、DTO、Controller 参数

更复杂的格式需求或通用数据类型,如手机号、金额等

 

 


 

 

✅ 示例对比

 

 

 

1️⃣ 使用 

@DateTimeFormat

 

public class UserForm {
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDate;
}

适合简单的日期字段绑定,不需要额外代码,快捷方便。

 


 

 

2️⃣ 使用自定义 

Formatter

 

@Component
public class LocalDateFormatter implements Formatter<LocalDate> {
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    @Override
    public LocalDate parse(String text, Locale locale) {
        return LocalDate.parse(text, formatter);
    }

    @Override
    public String print(LocalDate object, Locale locale) {
        return formatter.format(object);
    }
}

注册 Formatter:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new LocalDateFormatter());
    }
}

适合全局统一格式或更复杂的解析逻辑

 


 

 

🧠 总结一句话

 

 

  • 用 @DateTimeFormat 处理简单的日期字段转换就够了;

  • 如果需要对某个类型做全局统一的格式控制,或者是自定义非日期类型的转换,请实现 Formatter。

 

posted on 2025-04-30 10:22  我就是奇迹  阅读(15)  评论(0)    收藏  举报