springboot的datatimeformatte注解
时间: 2025-06-22 09:43:29 浏览: 11
### 使用 `@DateTimeFormat` 注解进行日期格式化
在 Spring Boot 应用程序中,为了确保传入的日期字符串能够被正确解析成 Java 的 `Date`, `Calendar`, 或者 `LocalDate/LocalTime/LocalDateTime` 对象,可以使用 `@DateTimeFormat` 注解。此注解允许指定输入数据应遵循的时间模式。
对于简单的场景,在实体类字段上直接应用该注解并设置期望的日期时间样式即可:
```java
import org.springframework.format.annotation.DateTimeFormat;
public class Event {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate eventDate;
}
```
当需求变得更加复杂——比如希望支持多样的日期表达形式时,则需采取更灵活的方式处理。这涉及到创建一个自定义的 `Formatter<Date>` 实现,并将其注册至全局转换服务内[^1]。
下面是一个完整的例子展示如何实现这一点:
#### 自定义日期格式器
首先编写一个新的类用于封装不同的日期解析逻辑:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MultiPatternDateFormatter implements Formatter<Date> {
private final String[] patterns;
public MultiPatternDateFormatter(String... patterns) {
this.patterns = patterns;
}
@Override
public Date parse(String text, Locale locale) throws ParseException {
for (String pattern : patterns) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(text);
} catch (ParseException e) {}
}
throw new IllegalArgumentException("Invalid date format");
}
@Override
public String print(Date object, Locale locale) {
// Choose a default pattern to convert the date back into string form.
return new SimpleDateFormat(this.patterns[0]).format(object);
}
}
```
#### 配置全局转换服务
接着修改配置文件或通过编程方式向应用程序上下文中注入上述定制化的格式化工作者实例:
```java
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new MultiPatternDateFormatter(
"yyyy/MM/dd", "dd.MM.yyyy", "yyyyMMdd"
));
}
}
```
现在无论客户端发送哪种类型的 ISO 8601 标准之外的标准日期串给服务器端接口参数标注有 `@RequestParam` 或表单提交体内的对象属性标记着 `@ModelAttribute` ,只要匹配到了预设好的任一模板就能顺利完成映射工作了。
此外,如果只是想要针对某个特定的 RESTful API 请求体中的 JSON 数据成员执行类似的宽松型验证操作的话,除了继续沿用上面提到的方法外还可以考虑引入 Jackson 提供的相关特性配合完成任务。例如,在 POJO 属性声明处同时加上来自 FasterXML 组织下的 `@JsonFormat` 注解来指明序列化反序列化过程中所采用的具体表现形式[^3]。
```java
@Data
public class DemoTest {
@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd", timezone="GMT+8")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime nowTime;
}
```
阅读全文
相关推荐














