Spring4:具有Java 8 Date-Time API的@DateTimeFormat

Spring4:具有Java 8 Date-Time API的@DateTimeFormat

在Spring 3.0中作为Formatter SPI的一部分引入的@DateTimeFormat批注可用于解析和打印Web应用程序中的本地化字段值。 在Spring 4.0中, @DateTimeFormat批注可以直接与Java 8 Date-Time API( java.time )一起使用。

在Spring中,可以通过字段类型或注释来配置字段格式。 要将注释绑定到格式化程序,必须实现AnnotationFormatterFactory Spring 4.0 Jsr310DateTimeFormatAnnotationFormatterFactoryJsr310DateTimeFormatAnnotationFormatterFactory ,该Jsr310DateTimeFormatAnnotationFormatterFactory格式化了以@DateTimeFormat注释的Java 8 Date-Time字段。 支持的字段类型如下:

  • java.util.LocalDate
  • java.util.LocalTime
  • java.util.LocalDateTime
  • java.util.ZonedDateTime
  • java.util.OffsetDateTime
  • java.util.OffsetTime

可以采用以下形式使用所有提到的类型:

public class DatesForm {

    @DateTimeFormat(iso = ISO.DATE)
    private LocalDate localDate;

    @DateTimeFormat(iso = ISO.TIME)
    private LocalTime localTime;

    @DateTimeFormat(iso = ISO.TIME)
    private OffsetTime offsetTime;

    @DateTimeFormat(iso = ISO.DATE_TIME)
    private LocalDateTime localDateTime;

    @DateTimeFormat(iso = ISO.DATE_TIME)
    private ZonedDateTime zonedDateTime;

    @DateTimeFormat(iso = ISO.DATE_TIME)
    private OffsetDateTime offsetDateTime;
    
}

表单可以传递给视图,Spring会照顾字段的正确格式。

Spring4:具有Java 8 Date-Time API的@DateTimeFormat

在类型字段上指定格式时: java.util.LocalDatejava.util.LocalTimejava.util.OffsetTime您需要记住正确配置@DateTimeFormat

@DateTimeFormat声明字段应设置为日期时间,并且因为java.util.LocalDate表示日期,而其他两个表示时间–您将获得java.time.temporal.UnsupportedTemporalTypeException (例如:不支持的字段:ClockHourOfAmPm,不支持字段:java.time.format.DateTimeFormatter抛出的java.time.format.DateTimeFormatter

翻译自: https://www.javacodegeeks.com/2014/06/spring-4-datetimeformat-with-java-8-date-time-api.html