Spring 启动 2 未序列化 LocalDateTime
Spring Boot 2 not serializing LocalDateTime
我最近尝试使用spring-boot 2 实现一个微服务。
现在,每当我尝试从我的 REST 服务 return 一个包含 java.time.LocalDateTime
的对象时,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 的任何尝试,并且它保持 returning 相同的结果。
在 application.yml
中将 com.fasterxml
的日志级别设置为 DEBUG 也不会产生任何输出:
logging:
level:
com.fasterxml: DEBUG
我使用 Spring Boot 2.1.0-RELEASE 和 Jackson 2.9.7。
基本 pom 文件是从 https://start.spring.io 我的项目编译并在 Java 8 JVM 上运行的。
您必须为 jackson 添加 jsr310 支持:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.4.0</version>
</dependency>
此答案基于 teppic 对原文的评论 post。
问题是由我的一个@Configuration 类 上的@EnableWebMVC 引起的。删除@EnableWebMVC 立即解决问题。
根据您的评论,我发现了您将 @EnableWebMvc
与 sprongboot 混合时的问题。事实证明,Spring Boot 不能与标准 Spring MVC @EnableWebMvc
很好地融合。当您添加注释时会发生什么 spring 引导自动配置被禁用。
我最近尝试使用spring-boot 2 实现一个微服务。
现在,每当我尝试从我的 REST 服务 return 一个包含 java.time.LocalDateTime
的对象时,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 的任何尝试,并且它保持 returning 相同的结果。
在 application.yml
中将 com.fasterxml
的日志级别设置为 DEBUG 也不会产生任何输出:
logging:
level:
com.fasterxml: DEBUG
我使用 Spring Boot 2.1.0-RELEASE 和 Jackson 2.9.7。
基本 pom 文件是从 https://start.spring.io 我的项目编译并在 Java 8 JVM 上运行的。
您必须为 jackson 添加 jsr310 支持:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.4.0</version>
</dependency>
此答案基于 teppic 对原文的评论 post。
问题是由我的一个@Configuration 类 上的@EnableWebMVC 引起的。删除@EnableWebMVC 立即解决问题。
根据您的评论,我发现了您将 @EnableWebMvc
与 sprongboot 混合时的问题。事实证明,Spring Boot 不能与标准 Spring MVC @EnableWebMvc
很好地融合。当您添加注释时会发生什么 spring 引导自动配置被禁用。