我正在开发一个使用纯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来解决这些问题?
答案 0 :(得分:2)
@JsonFormat
是杰克逊的注释; @DateTimeFormat
是一个Spring注释。
@JsonFormat
将在LocalDateTime
序列化为JSON期间控制格式。
杰克逊不知道Spring的@DateTimeFormat
,它用于在JSP中查看bean的格式,当它在JSP视图中呈现时。
的Javadoc: