如何配置Jackson ObjectMapper序列化时排除type字段?
解决Jackson序列化时多余type字段的问题
你遇到的问题根源在于代码中给ObjectMapper配置了默认类型解析器,哪怕设置了JsonTypeInfo.Id.NONE,这个操作依然会触发Jackson的类型处理逻辑,最终导致序列化结果中出现多余的type字段。
解决方案
直接移除整个setDefaultTyping的配置代码块即可,因为你不需要在序列化结果中包含任何类型信息,完全不需要启用默认类型解析功能。
修改后的ObjectMapper Bean配置如下:
@Bean(name = "gcpObjectMapper") public ObjectMapper gcpMenuSyncMessageObjectMapper(Jackson2ObjectMapperBuilder builder) { final ObjectMapper objectMapper = builder .createXmlMapper(false) .build(); // Java 8特性支持的自定义配置 objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 移除了导致type字段生成的默认类型解析配置 return objectMapper; }
额外检查点
如果Foo类或者它的父类上标注了@JsonTypeInfo注解,那么即使移除了全局配置,注解的优先级更高,依然会生成type字段。这种情况下需要:
- 直接去掉类上的
@JsonTypeInfo注解; - 或者在类上添加
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)来覆盖原有注解的行为。
内容的提问来源于stack exchange,提问作者TomTom
相关产品推荐
相关产品推荐

