Java 使用Jackson在存在互斥字段时引发异常的通用方法
我使用的是Jackson FasterXML 2.9.0版,当我需要在序列化/反序列化过程中消除互斥字段时,遇到了一个问题 下面是一个简单的例子:Java 使用Jackson在存在互斥字段时引发异常的通用方法,java,jackson,fasterxml,Java,Jackson,Fasterxml,我使用的是Jackson FasterXML 2.9.0版,当我需要在序列化/反序列化过程中消除互斥字段时,遇到了一个问题 下面是一个简单的例子: public class Container { private GenericType type; private A a; <-- fields a and b are mutually exclusive private B b; <-- both of them u
public class Container {
private GenericType type;
private A a; <-- fields a and b are mutually exclusive
private B b; <-- both of them use "type" field as EXTERNAL_PROPERTY to identify the correct Java Type of POJOs
}
公共类容器{
私有泛型类型;
私有A A;Onetype
属性为属性A
和b
定义Java类型。因此A
和b
在类中的定义方式相同:private ta
和private tb
。这还取决于您是否要检查JSON
有效负载是否正确反序列化后的有效或Java
对象。如果JSON
您可以对照验证JSON
。如果Java
对象,您可以使用JsonCreator
注释创建构造函数,并在构造函数中检查是否设置了两个属性。也许您不应该有两个属性-只有一个属性具有aliases.@MichałZiober谢谢你的回答。事实上,我有两个以上不同类型的字段,但只有一个抽象类,由于业务需要,我无法更改。我有许多地方使用“选择”的相同方法可以集成,所以我想知道我是否错过了Jackson文档中的一些内容,我甚至考虑创建一个自定义注释,其中所有属性都将在runtimeOnetype
property definesJava type
中声明并验证带有此类注释的类,用于属性a
和b
。因此a
和b
在类中的定义方式相同:private ta
和private tb
。这还取决于您是否要检查JSON
payload
是有效的还是反序列化后的Java
对象。在caseJSON
中,您可以根据验证JSON
。在caseJ中ava
对象您可以使用JsonCreator
注释创建构造函数,并在构造函数中检查是否设置了两个属性。也许您不应该有两个属性—只有一个带别名的属性。@MichałZiober感谢您的回答。实际上,我有两个以上不同类型的字段,但只有一个抽象类,我无法更改nge这是因为业务需求。我有很多地方可以将相同的方法与“choice”集成在一起,所以我想知道我是否遗漏了一些文档中提到的内容,我甚至考虑创建一个自定义注释,在其中声明所有属性,并在运行时使用此类注释验证类