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个小时找到一个实现,但它是如此接近和简单。。。非常感谢你!