java - 如何使用 Jackson AnnotationIntrospector 有条件地忽略属性

标签 java json annotations jackson annotation-introspector

我想创建一个注解让 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/

相关文章:

scala - 使方法实际内联

java - Jersey 客户端日志响应和 getEntity

java - jsoup 从 <a> 标签内的标签获取文本

java - 断言错误 : No value for JSON Path in JUnit test

javascript - 如何在 javascript 中创建 json 对象的哈希表?

.net - [Bind(Exclude = "AlbumId")]注解在数据验证中的作用是什么?脚手架是什么意思?

ios - 如何使用注释创建 PDF?

java - 我如何得到一个图来估计我的算法的性能?

java - 没有找到适合 jdbc 的驱动程序 :mariadb://127. 0.0.1 :3306/mydb? user=root

javascript - 通过 AJAX 将 JSON 传递给 Python 脚本