我不确定这是否可行,但我想让Jackson可序列化对象上的setter重载。这样,根据该字段中的对象,其反序列化的方式将有所不同。
示例
public class Thing {
private MyObject1 object;
public MyObject1 getObject() {
return object;
public void setObject(MyObject1 object) {
this.object = object;
}
public void setObject(MyObject2 object) {
this.object = translate1To2(object);
}
}
如果这不可能,有人会给我替代方法吗?我担心的是,在只有一个设置器的简单情况下,Jackson不必选择将对象反序列化为JSON的对象,因此不确定是否可以。
更新:以上给出的是com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "object"
。
答案 0 :(得分:1)
我认为最好的方法是添加一个自定义反序列化类
@JsonDeserialize(using = ThingDeserializer.class)
public class Thing {
...
}
此处反序列化的示例 https://www.baeldung.com/jackson-deserialization
然后,您的bean将变得干净,并根据需要创建自己的JSON
答案 1 :(得分:0)
由于杰克逊实际上无法像这样使设置员超载,所以我的解决方法如下:
我做了一个反序列化器,将MyObject2
转换为MyObject1
并有一个setter,所以我的课看起来像这样:
public class Thing {
@JsonDeserialize(using = MyObjectDeserializer.class)
private MyObject1 object;
public MyObject1 getObject() {
return object;
public void setObject(MyObject1 object) {
this.object = object;
}
}