为了账号安全,请及时绑定邮箱和手机立即绑定

Jackson 对象上的重载 setter

Jackson 对象上的重载 setter

三国纷争 2021-12-10 15:23:29
我不确定这是否可行,但我想在 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);    }}如果这是不可能的,有人会为我提供替代方法吗?我担心的是,在只有一个 setter 的简单情况下,Jackson 不必选择将 JSON 反序列化为哪个对象,因此不确定它是否可以。更新:以上给出了com.fasterxml.jackson.databind.JsonMappingException: Conflicting setter definitions for property "object"原样。
查看完整描述

2 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

最好的方法,我认为是添加一个自定义反序列化类


@JsonDeserialize(using = ThingDeserializer.class)

public class Thing {

...

}

此处反序列化示例 https://www.baeldung.com/jackson-deserialization


然后,您的 bean 将永远干净,您可以根据需要制作自己的 JSON


查看完整回答
反对 回复 2021-12-10
?
狐的传说

TA贡献1804条经验 获得超3个赞

因为在 Jackson 中实际上不能像这样重载 setter,所以我的解决方案如下:


我做了一个解串器转换MyObject2到MyObject1并且生了一个二传手,所以我的课是这样的:


public class Thing {


    @JsonDeserialize(using = MyObjectDeserializer.class)

    private MyObject1 object;


    public MyObject1 getObject() {

        return object;


    public void setObject(MyObject1 object) {

        this.object = object;

    }

}


查看完整回答
反对 回复 2021-12-10
  • 2 回答
  • 0 关注
  • 428 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号