Spring java.time 的 DateTimeFormat 配置

Spring DateTimeFormat Configuration for java.time

我正在开发一个 Spring WebMvc(不是 Spring Boot)项目,该项目使用纯 Java 配置来设置其 bean。我很难让 Spring/Jackson 尊重带有 java.time (jsr310) 对象的 @DateTimeFormat 注释,例如 LocalDateTime.

我在 class 路径上有 jackson-datatype-jsr310 和 jackson-databind jar(版本 2.7.4),以及基本 webmvc 应用程序的相关 spring jar spring-context 和 spring-webmvc(版本 4.3.0.RELEASE)

这是我的相关配置class:

@Configuration
@ComponentScan({"com.example.myapp"})
public class WebAppConfig extends WebMvcConfigurationSupport {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        ObjectMapper mapper = Jackson2ObjectMapperBuilder
            .json()
            .indentOutput(true)
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .findModulesViaServiceLoader(true)
            .build();

        converters.add(new MappingJackson2HttpMessageConverter(mapper));

        super.addDefaultHttpMessageConverters(converters);
    }
}

我已经通过在 rest 控制器上序列化我的数据模型来对此进行了测试。似乎杰克逊尊重@JsonFormat,但完全忽略了@DateTimeFormat。

我缺少什么额外的配置来让 spring/jackson 遵守@DateTimeFormat?我应该注意的两个注释之间是否有任何关键区别,我可以 运行 仅通过使用 @JsonFormat 解决的问题?

@JsonFormat 是 Jackson 注释; @DateTimeFormat 是一个 Spring 注释。

@JsonFormat 将在 LocalDateTime 到 JSON.

的序列化期间控制格式

Jackson 不知道 Spring 的 @DateTimeFormat,当它在 JSP 视图中呈现时,它用于控制 Spring 中 bean 的格式.

Javadocs:

http://docs.spring.io/spring-framework/docs/4.2.3.RELEASE/javadoc-api/org/springframework/format/annotation/DateTimeFormat.html

http://static.javadoc.io/com.fasterxml.jackson.core/jackson-annotations/2.7.5/com/fasterxml/jackson/annotation/JsonFormat.html