Springdoc中JacksonAnnotationIntrospector与@JsonTypeInfo不生效求助
问题解决步骤
1. 确保自定义ObjectMapper完整包含所有Jackson配置
你当前通过Jackson2ObjectMapperBuilder.build()生成的ObjectMapper,可能未显式绑定自定义的JacksonAnnotationIntrospector。需要在构建mapper时,明确注入自定义introspector:
@Bean public ModelResolver modelResolver(Jackson2ObjectMapperBuilder builder) { ObjectMapper mapper = builder.build(); // 替换为你的自定义AnnotationIntrospector实例 mapper.setAnnotationIntrospector(new CustomJacksonAnnotationIntrospector()); // 若@JsonTypeInfo通过mixins配置,确保mixins已正确注册 // mapper.addMixIn(Money.class, MoneyMixin.class); return new ModelResolver(mapper); }
2. 强制Springdoc复用全局ObjectMapper
如果项目中已存在配置完整的全局ObjectMapper Bean(包含自定义序列化器、反序列化器、mixins及AnnotationIntrospector),直接注入该Bean到ModelResolver,避免重新构建导致的配置不一致:
@Bean public ModelResolver modelResolver(ObjectMapper customObjectMapper) { return new ModelResolver(customObjectMapper); }
3. 配置Springdoc的Jackson序列化策略
在application.properties中添加配置,强制Springdoc遵循Jackson的注解解析规则:
# 启用Jackson注解全量支持 springdoc.object-mapper-configurer=com.yourpackage.CustomObjectMapperConfigurer
同时实现自定义配置类,统一管理Jackson配置:
@Component public class CustomObjectMapperConfigurer implements ObjectMapperConfigurer { @Override public void configure(ObjectMapper objectMapper) { objectMapper.setAnnotationIntrospector(new CustomJacksonAnnotationIntrospector()); objectMapper.registerModule(new CustomMoneyModule()); // 注册自定义序列化/反序列化模块 objectMapper.addMixIn(Money.class, MoneyMixin.class); } }
4. 验证@JsonTypeInfo配置有效性
确认@JsonTypeInfo注解直接标注在Money.class上,或在对应mixins类中正确配置,且ObjectMapper已加载这些mixins。若通过模块注册mixins,需确保模块已被正确注册到ObjectMapper。
5. 保证自定义ModelResolver的优先级
用@Primary标记你的自定义ModelResolver Bean,确保Spring优先使用该实例,避免默认ModelResolver覆盖配置:
@Primary @Bean public ModelResolver modelResolver(ObjectMapper customObjectMapper) { return new ModelResolver(customObjectMapper); }
内容的提问来源于stack exchange,提问作者mdanish98
相关产品推荐
相关产品推荐

