java.time

时间:2016-06-16 23:38:53

标签: java spring jackson jsr310

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

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

这是我的相关配置类:

@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);
    }
}

我通过在休息控制器上序列化我的数据模型来测试这个。看来杰克逊尊重@JsonFormat,但完全无视@DateTimeFormat。

为了让spring / jackson尊重@DateTimeFormat,我错过了哪些额外的配置?我应该注意的两个注释之间是否存在任何关键差异,我可以通过使用@JsonFormat来解决这些问题?

1 个答案:

答案 0 :(得分:2)

@JsonFormat是杰克逊的注释; @DateTimeFormat是一个Spring注释。

@JsonFormat将在LocalDateTime序列化为JSON期间控制格式。

杰克逊不知道Spring的@DateTimeFormat,它用于在JSP中查看bean的格式,当它在JSP视图中呈现时。

的Javadoc:

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