我想创建一个注释,让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
的示例。
答案 0 :(得分:4)
如果您想要归类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();
}
但请注意,注释内省仅在每个类中出现一次,因此您无法动态更改所使用的条件。
对于更多动态过滤,您可能希望使用JSON过滤器功能,例如参见:http://www.cowtowncoder.com/blog/archives/2011/09/entry_461.html