我使用的是Spring 4.3.3版本和Jackson版本2.8.3.我试图根据在运行时确定的一些自定义逻辑从实体bean中过滤掉特定字段.@JsonFilter似乎是这类功能的理想选择.问题是当我把它放在字段或方法级别时,我的自定义过滤器永远不会被调用.如果我把它放在类级别,它会被调用就好了.我不想在类级别使用它,但从那时起我需要单独维护我想要应用逻辑的硬编码字段名称列表.从Jackson 2.3开始,应该存在将这个注释放在字段级别的能力.
这是最基本的自定义过滤器,没有任何自定义逻辑:
public class MyFilter extends SimpleBeanPropertyFilter {
@Override
protected boolean include(BeanPropertyWriter beanPropertyWriter) {
return true;
}
@Override
protected boolean include(PropertyWriter propertyWriter) {
return true;
}
Run Code Online (Sandbox Code Playgroud)
}
然后我有Jackson ObjectMapper配置:
public class MyObjectMapper extends ObjectMapper {
public MyObjectMapper () {
SimpleFilterProvider filterProvider = new SimpleFilterProvider();
filterProvider.addFilter("myFilter", new MyFilter());
setFilterProvider(filterProvider);
}
}
Run Code Online (Sandbox Code Playgroud)
最后我有我的实体bean:
@Entity
public class Project implements Serializable {
private Long id;
private Long version;
@JsonFilter("myFilter") private String name;
@JsonFilter("myFilter") private String description;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
如果我将@JsonFilter注释移动到@Entity所在的类级别,则至少会调用过滤器,但是当它在字段级别时(如此处的示例),它永远不会被调用.