基于父上下文的自定义Jackson JSON序列化

Dav*_*idA 5 java serialization json jackson

我试图根据来自父级的信息有条件地序列化子bean。

public class Parent {
  private boolean isSecure;
  private Child child;
}

public class Child {
  String someValue;
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果the parent.isSecure()为true,那么我想someValue比if parent.isSecure()为false 进行序列化。

我的实际类比这个简单的示例要复杂得多,所以我真的不想为此创建一个完整的自定义序列化程序Parent,除非需要向我展示如何Parent在不使用该序列化自定义序列化程序的情况下利用标准序列化,否则我将需要对其进行单独维护。必须遍历所有属性并处理JSON批注,视图等。如果可以,那可能行得通,因为我可以根据来设置上下文属性isSecure()。

我不介意为孩子编写自定义序列化程序,但是我不知道如何从父级检查值。

我考虑过使用“安全”视图和“不安全”视图,我可以在整个序列化过程中指定该视图,但随后我将不得不遍历并注释父类的许多属性,以使其同时处于“安全”状态和“不安全”视图(DEFAULT_VIEW_INCLUSION由于许多我不想序列化的属性,我已经关闭了该选项)。

我尝试generator.getCurrentValue()在自定义的Child序列化程序中进行访问,但是它始终为null,因此不确定该如何工作。

我已经考虑过为编写自定义序列化程序isSecure,并在其中设置上下文属性,但是如何确定在为孩子定制自定义序列化程序之前将其调用?(尽管我承认我不确定上下文属性是否真的像我假设的那样工作。)

有任何想法吗?

Uri*_*lit 0

我不知道你的设计的完整长度,但恕我直言,我认为这表明设计中存在一些问题。如果对象的解析方式不同,则意味着它们本质上不同 - 在这种情况下,为什么不通过继承将它们分开呢?一种方法是:

    public class Parent {
        private Child child;
    }

    public class SecureChild extends Parent {
        String someValue;
    }

    public class InSecureChild extends Parent {
        String someValue;
    }
Run Code Online (Sandbox Code Playgroud)