Java 使用Jackson在存在互斥字段时引发异常的通用方法

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

我使用的是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 use "type" field as EXTERNAL_PROPERTY to identify the correct Java Type of POJOs
}
公共类容器{
私有泛型类型;

私有A A;One
type
属性为属性
A
b
定义
Java类型
。因此
A
b
在类中的定义方式相同:
private ta
private tb
。这还取决于您是否要检查
JSON
有效负载
是否正确反序列化后的有效或
Java
对象。如果
JSON
您可以对照验证
JSON
。如果
Java
对象,您可以使用
JsonCreator
注释创建构造函数,并在构造函数中检查是否设置了两个属性。也许您不应该有两个属性-只有一个属性具有aliases.@MichałZiober谢谢你的回答。事实上,我有两个以上不同类型的字段,但只有一个抽象类,由于业务需要,我无法更改。我有许多地方使用“选择”的相同方法可以集成,所以我想知道我是否错过了Jackson文档中的一些内容,我甚至考虑创建一个自定义注释,其中所有属性都将在runtimeOne
type
property defines
Java type
中声明并验证带有此类注释的类,用于属性
a
b
。因此
a
b
在类中的定义方式相同:
private ta
private tb
。这还取决于您是否要检查
JSON
payload
是有效的还是反序列化后的
Java
对象。在case
JSON
中,您可以根据验证
JSON
。在case
J中ava
对象您可以使用
JsonCreator
注释创建构造函数,并在构造函数中检查是否设置了两个属性。也许您不应该有两个属性—只有一个带别名的属性。@MichałZiober感谢您的回答。实际上,我有两个以上不同类型的字段,但只有一个抽象类,我无法更改nge这是因为业务需求。我有很多地方可以将相同的方法与“choice”集成在一起,所以我想知道我是否遗漏了一些文档中提到的内容,我甚至考虑创建一个自定义注释,在其中声明所有属性,并在运行时使用此类注释验证类