Java Jackson动态更改JsonIgnore

Java Jackson动态更改JsonIgnore,java,json,deserialization,jackson,Java,Json,Deserialization,Jackson,我有一个类,里面也有变量。有时我想忽略一些字段,有时在反序列化时不想忽略(也可能在序列化时)。在Jackson我该怎么做呢?你可能应该看看最近的Jackson版本 一种可能的机制是使用一种新的方法 我一直在寻找一个有用的在线教程或例子,但没有立即出现。如果更多地了解您的上下文,可能会想出一些办法。您是手动管理您的ObjectMappers,还是在JAX-RS设置中使用它们,在Spring中注入,还是什么?对于序列化,“博客条目应该有帮助。反序列化方面的支持较少,因为更常见的情况是要过滤掉编写的内

我有一个类,里面也有变量。有时我想忽略一些字段,有时在反序列化时不想忽略(也可能在序列化时)。在Jackson我该怎么做呢?

你可能应该看看最近的Jackson版本

一种可能的机制是使用一种新的方法

我一直在寻找一个有用的在线教程或例子,但没有立即出现。如果更多地了解您的上下文,可能会想出一些办法。您是手动管理您的
ObjectMapper
s,还是在JAX-RS设置中使用它们,在Spring中注入,还是什么?

对于序列化,“博客条目应该有帮助。反序列化方面的支持较少,因为更常见的情况是要过滤掉编写的内容

一种可能的方法是将JacksonAnnotationIntrospector子类化,重写内省方法(和/或字段)可忽略性的方法,以使用您想要的任何逻辑


如果您给出了一个实际应用程序的示例,也可能会有所帮助,即您试图阻止反序列化的内容和原因。

您可能希望使用JsonViews(最初取自-breaked now-web archive链接:)

引用它: 首先,定义视图意味着声明类;您可以重用现有的类,或者只创建伪类——它们只是带有关系信息的视图标识符(子对象从父对象继承视图成员资格):

使用此类视图定义,序列化将按如下方式进行:

 // short-cut:
  objectMapper.writeValueUsingView(out, beanInstance, ViewsPublic.class);

  // or fully exploded:
  objectMapper.getSerializationConfig().setSerializationView(Views.Public.class);
  // (note: can also pre-construct config object with 'mapper.copySerializationConfig'; reuse)
  objectMapper.writeValue(out, beanInstance); // will use active view set via Config

  // or, starting with 1.5, more convenient (ObjectWriter is reusable too)
  objectMapper.viewWriter(ViewsPublic.class).writeValue(out, beanInstance);
and result would only contain 'name', not 'address' or 'ssn'.

这里有一个解释:我不使用Roo和aspectj代码在Intellij IDEA8中给出错误(无法识别thisJoinPoint和Procedure方法)。如果我能像上面描述的那样将其实现为注释,那就太好了。我有一个Spring3REST应用程序。我在服务器端有一个bean,并在客户端列出它们。然而,它有许多字段,我并没有在表中列出我bean的每个字段。但是在另一个页面中,我在另一个表中列出了bean的所有字段。所以我的目的是,我不想为了提高效率而将所有信息发送到客户端;反序列化则相反(将JSON读入对象)。所以,也许您正在寻找序列化功能?如果是这样,我提到的链接将非常有用?序列化对我来说非常重要,你是对的。我读了这个链接,我会努力实现它,谢谢你的帮助。这个链接太棒了!我发现完全动态过滤:
@JsonFilter
非常适合我的用例,我希望在获取(序列化)方面有更多的控制,但不会超过某个级别,因为它最终以递归方式获取。我倾向于这样。
 // short-cut:
  objectMapper.writeValueUsingView(out, beanInstance, ViewsPublic.class);

  // or fully exploded:
  objectMapper.getSerializationConfig().setSerializationView(Views.Public.class);
  // (note: can also pre-construct config object with 'mapper.copySerializationConfig'; reuse)
  objectMapper.writeValue(out, beanInstance); // will use active view set via Config

  // or, starting with 1.5, more convenient (ObjectWriter is reusable too)
  objectMapper.viewWriter(ViewsPublic.class).writeValue(out, beanInstance);
and result would only contain 'name', not 'address' or 'ssn'.