Jackson Object Mapper 在提供扩展配置时不工作,但在 Spring Boot 中提供类级别/字段级别注释时工作
Posted
技术标签:
【中文标题】Jackson Object Mapper 在提供扩展配置时不工作,但在 Spring Boot 中提供类级别/字段级别注释时工作【英文标题】:Jackson Object Mapper not working when extended configuration provided but working when providing class level/field level annotations in Spring Boot 【发布时间】:2019-02-25 22:30:42 【问题描述】:当我将 jjwt 安全添加到 Spring Boot 应用程序时,以下对象映射器配置不起作用。
@Configuration
public class CustomObjectMapper extends ObjectMapper
/**
* Default serial version id generated.
*/
private static final long serialVersionUID = 1L;
public CustomObjectMapper()
this.setSerializationInclusion(Include.NON_EMPTY);
this.registerModule(new ThreeTenModule());
this.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
此处添加了安全依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
下面的 Jackson 注释在类/字段级别上起作用。
@JsonInclude(Include.NON_EMPTY)
为什么没有将 bean 配置的自定义对象映射器用于序列化和反序列化?是否有其他库配置了覆盖我的自定义映射器的对象映射器?
【问题讨论】:
尝试如下但没有运气。@Component public class CustomObjectMapper @Bean @Primary public ObjectMapper objectMapper() ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setSerializationInclusion(Include.NON_EMPTY); objectMapper.registerModule(new ThreeTenModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); return objectMapper;
【参考方案1】:
经过长时间的调查,我注意到 @EnableWebMvc 注释的配置 bean 在一个依赖库中可用。并从here 得知@EnableWebMvc 禁用了Spring Boot 的MVC 自动配置,从而完全控制提供客户MVC 配置。 HTTP 消息转换器也将包含在 Spring MVC 组件中,这反过来又禁用了我的自定义杰克逊对象映射器配置。
PS:由于 jjwt 默认导入 jackson 数据绑定依赖项,因此它属于我的可疑列表。感觉很好,我可以 RCA。谢谢。
【讨论】:
以上是关于Jackson Object Mapper 在提供扩展配置时不工作,但在 Spring Boot 中提供类级别/字段级别注释时工作的主要内容,如果未能解决你的问题,请参考以下文章
导入 Jackson-Core-1.x.x 和 Jackson-Mapper-1.x.x 时,我在打包 APK 错误时收到重复文件
使用 Jackson JSON Mapper 在 JSON 到 POJO 之间映射时出现 400 Bad Request