5

我想创建一个注释以使杰克逊忽略带注释的字段,除非设置了某个跟踪级别:

public class A {
    @IgnoreLevel("Debug") String str1;
    @IgnoreLevel("Info") String str2;
}

或者,如果这更容易实现,我还可以为不同级别提供单独的注释:

public class A {
    @Debug String str1;
    @Info String str2;
}

根据 的配置ObjectMapper,要么

  • 序列化和反序列化时应忽略所有“调试”和“信息”字段,或
  • 应忽略所有“调试”字段,或
  • 所有字段都应序列化/反序列化。

我想这应该可以通过自定义AnnotationIntrospector. 我有这篇文章,但它没有展示如何实现自定义的示例AnnotationIntrospector

4

1 回答 1

5

如果你想子类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

于 2015-03-12T21:56:22.407 回答