[英]Spring Boot 2 not serializing LocalDateTime
我最近尝试使用 spring-boot 2 实现一个微服务。
现在,每当我尝试从我的 REST 服务返回包含java.time.LocalDateTime
的 object 时,LocalDateTime 将被序列化为整数数组。 像这样:
{
"id": "5bf1425f9f8de267f04b22ad",
"description": "aaaaaarrrgggghhhhh",
"timestamp": [
2018,
11,
18,
11,
43,
43,
889000000
],
"time": 2.25,
...
}
我尝试通过application.yml
中的设置配置ObjectMapper
spring:
jackson:
serialization:
write-dates-as-timestamps: false
但不起作用。 我还尝试通过 Spring 配置 class 配置新的 ObjectMapper,如下所示:
@Configuration
public class JacksonConfig {
@Bean
@Primary
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
final ObjectMapper objectMapper = builder.build();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
return objectMapper;
}
}
我的配置被加载(调试器在断点处停止) - 只是它什么都不做。
我尝试手动将jackson
依赖项(也适用于 jsr310 模块)添加到我的 pom.xml - 也没有任何运气。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
由于某种原因,Spring Boot 似乎忽略了我对 ObjectMapper 的任何尝试,并且它一直返回相同的结果。
在application.yml
com.fasterxml
的日志级别设置为 DEBUG 也不会产生 output:
logging:
level:
com.fasterxml: DEBUG
我使用 Spring Boot 2.1.0-RELEASE 和 Jackson 2.9.7。
The basic pom file was generated from https://start.spring.io My project compiles for and runs on a Java 8 JVM.
这个答案是基于teppic对原帖的评论。
问题是由@EnableWebMVC在我的一个@Configuration类上引起的。 删除@EnableWebMVC立即解决了问题。
从你的评论我发现问题,你将@EnableWebMvc
与sprongboot混合在一起。 事实证明,Spring Boot与标准的Spring MVC @EnableWebMvc
不能很好地@EnableWebMvc
。 添加注释时会发生的情况是禁用spring boot autoconfiguration。
您必须为jackson添加jsr310支持:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.4.0</version>
</dependency>
每个人都说@EnableWebMvc 是罪魁祸首。 但是,没有人用WebMvc说如何解决这个问题。
所以,要回答这个问题,是的,有一种方法可以通过不删除@EnableWebMvc 来解决这个问题。
在进入答案之前,让我们了解一些概念:
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// Remove the default MappingJackson2HttpMessageConverter
converters.removeIf(converter -> {
String converterName = converter.getClass().getSimpleName();
return converterName.equals("MappingJackson2HttpMessageConverter");
});
// Add your custom MappingJackson2HttpMessageConverter
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
converter.setObjectMapper(objectMapper);
converters.add(converter);
WebMvcConfigurer.super.extendMessageConverters(converters);
}
}
注意:请不要使用 configureMessageConverters() 而不是来自 WebMvcConfigurer 的 extendMessageConverters() 因为 configure 方法将删除所有将默认安装的现有转换器。
希望它能帮助像我这样浪费了几个小时调试问题的人:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.