Java 基于另一个字段的Jackson字段序列化

Java 基于另一个字段的Jackson字段序列化,java,json,serialization,jackson,Java,Json,Serialization,Jackson,考虑到我有这样的模型: public class Model { private String master; private Integer slave; private String notImportantField1; private String notImportantField2; private String notImportantField3; private String notImportantField4; pr

考虑到我有这样的模型:

public class Model {

    private String master;
    private Integer slave;
    private String notImportantField1;
    private String notImportantField2;
    private String notImportantField3;
    private String notImportantField4;
    private String notImportantField5;
    private String notImportantField6;
    private String notImportantField7;
    private String notImportantField8;
    private String notImportantField9;
    private String notImportantField10;
    private String notImportantField11;
    private String notImportantField12;
    private String notImportantField13;
    private String notImportantField14;
    private String notImportantField15;

    public void setMaster(String master) {
        this.master = master;
    };
    public String getMaster() {
        return master;
    };

    public void setSlave(Integer slave) {
        this.slave = slave;
    };
    public Integer getSlave() {
        return slave;
    };

    /** 
    * Similar getters/setters for other fields
    */
}
我想要的是,序列化之后,“从”字段的值应该是不同的类型,具体取决于“主”字段的值。例如,具有以下条件:

masterCondition = master.equals("string");
如果“masterCondition”为true,则结果为:

{
    "master": "master_value",
    "slave": "1234567890",
    **And all other fields as they are.**
}
{
    "master": "master_value",
    "slave": 1234567890,
    **And all other fields as they are.**
}
如您所见,在“slave”字段中有字符串值。 如果“masterCondition”为false,则结果为:

{
    "master": "master_value",
    "slave": "1234567890",
    **And all other fields as they are.**
}
{
    "master": "master_value",
    "slave": 1234567890,
    **And all other fields as they are.**
}
如您所见,在第二个响应中,在“slave”字段中有一个整数值

我尝试使用类级别的序列化程序,它对我来说很有用,但这些方法产生了大量用于“notImportantFields”和非空检查的样板代码

我还尝试使用ContextualSerializer,但若在字段级别使用这样的序列化程序,那个么似乎并没有办法获得另一个字段的值。 有没有一种方法可以在没有样板代码的情况下实现这种行为?
谢谢

您可以通过为
slave
字段声明“smart”getter来欺骗Jackson

像这样声明getter:

public Object getSlave() {
    if( "string".equals(master)) {
        return String.valueOf(slave);
    } else {
        return slave;
    }
}

Jackson将在运行时根据返回值的确切类型进行转换。

我对这段代码既高兴又沮丧。我花了大约4个小时找到一个实现,但它是如此接近和简单。。。非常感谢你!