@JsonView在多层类继承场景下过滤不生效需如何配置?
Jackson @JsonView多层继承场景过滤失效解决方案
以下是你需要检查和补充的配置项:
- 关闭Jackson默认无视图注解属性包含规则
该配置默认开启时,所有未标注@JsonView注解的属性都会被序列化,是继承场景下过滤失效的最常见原因。
Spring Boot配置示例(application.yml):
单独配置ObjectMapper示例:spring: jackson: mapper: DEFAULT_VIEW_INCLUSION: falseobjectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false); - 校验视图类的继承匹配关系
@JsonView支持视图类的继承传递:如果控制器指定的视图DeliveryPrdViews.History.class继承自某基础视图类,那么标注了该基础视图类的属性也会被序列化。你需要确认父类T、A中需要返回的属性,标注的视图要么是DeliveryPrdViews.History.class本身,要么是它的父视图类。 - 检查注解标注位置的兼容性
如果你使用Lombok的@Data自动生成get/set方法,父类字段上的@JsonView注解不会被自动继承到生成的get方法上,你可以选择手动编写get方法添加注解,或将@JsonView注解放到字段上,同时配置ObjectMapper允许扫描字段注解:objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); - 校验全局消息转换器配置
确认你自定义的Spring MVCHttpMessageConverter注入的是配置了上述规则的ObjectMapper实例,避免默认实例覆盖自定义配置导致规则失效。
内容的提问来源于stack exchange,提问作者MAMMIA
相关产品推荐
相关产品推荐

