Jackson序列化时忽略@JsonTypeName注解,无法生成type字段问题排查求助
Jackson序列化时@JsonTypeName注解失效,JSON无type字段的原因分析
我来帮你排查这个问题,结合你的代码和依赖配置,主要有这几个可能的原因:
1. 过时的注解启用配置导致注解未被处理
你代码里的这行配置存在问题:
mapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS, true);
在Jackson 2.x版本(包括你使用的2.11.1)中,SerializationConfig.Feature.USE_ANNOTATIONS已经被废弃,正确的配置应该使用MapperFeature.USE_ANNOTATIONS,而且这个属性默认值就是true。你手动配置这个过时的枚举值,反而可能干扰Jackson的注解处理逻辑,导致@JsonTypeName和@JsonTypeInfo注解被忽略。
建议直接删掉这行配置,或者替换为正确的写法:
mapper.configure(MapperFeature.USE_ANNOTATIONS, true);
2. 多态类型的显式注册缺失
虽然你在IC接口上标注了@JsonSubTypes,但有时候ObjectMapper需要显式注册子类型才能正确关联接口的多态配置。你可以尝试手动注册Elemencik类:
mapper.registerSubtypes(Elemencik.class);
3. ObjectMapper模块加载不完整
Jackson的databind模块默认会处理相关注解,但如果模块加载不完整,也可能影响注解解析。你可以尝试初始化ObjectMapper时自动扫描并注册模块:
ObjectMapper mapper = new ObjectMapper().findAndRegisterModules();
最后,你可以整合修改后的代码尝试序列化:
ObjectMapper mapper = new ObjectMapper().findAndRegisterModules(); IC mm = new Elemencik(); String res = mapper.writeValueAsString(mm);
这样应该就能生成包含"type":"DS"字段的JSON结果了。
内容的提问来源于stack exchange,提问作者maciejka
相关产品推荐
相关产品推荐

