我想创建一个注解让 Jackson 忽略带注解的字段,除非设置了特定的跟踪级别:
public class A {
@IgnoreLevel("Debug") String str1;
@IgnoreLevel("Info") String str2;
}
或者,如果这更容易实现,我也可以为不同的级别添加单独的注释:
public class A {
@Debug String str1;
@Info String str2;
}
根据 ObjectMapper
的配置,要么
- 在序列化和反序列化时应忽略所有“调试”和“信息”字段,或者
- 应忽略所有“调试”字段,或者
- 所有字段都应序列化/反序列化。
我想这应该可以通过自定义 AnnotationIntrospector
实现.我有这个 post ,但它没有显示如何实现自定义 AnnotationIntrospector
的示例。
最佳答案
如果你想继承JacksonAnnotationIntrospector
,你只需要覆盖hasIgnoreMarker
,像这样:
@Override
public boolean hasIgnoreMarker(AnnotatedMember m) {
IgnoreLevel lvl = m.findAnnotation(IgnoreLevel.class);
// use whatever logic necessary
if (level.value().equals("Debug")) return true;
return super.hasIgnoreMarker();
}
但请注意,每个类仅进行一次注释自省(introspection),因此您不能动态更改您使用的条件。
对于更多的动态过滤,您可能更愿意使用 JSON 过滤器功能,例如:http://www.cowtowncoder.com/blog/archives/2011/09/entry_461.html
关于java - 如何使用 Jackson AnnotationIntrospector 有条件地忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020408/