Spring MVC Jackson.在bean序列化期间添加字段



jackson v1.9.13弹簧3.2.0你好我花了好几天的时间试图弄清楚如何在序列化期间将字段从bean添加到JSON中。

这似乎是一个非常基本的功能,但我走的每一条路都会撞到橡胶墙。

我想要实现的目标:

示例bean:

package org.mydomain;
public class MyBean implements Serializable {
    private String foo;
    public void setFoo( String inValue ) {
        foo = inValue;
    }    
    public String getFoo() {
        return foo;
    }
}

输出:

{
    "_type" : "org.mydomain.MyBean",
    "foo" : "bar"
}

我认为最简单的方法是扩展BeanSerializer写入"_type"属性,并委托剩余字段的超类序列化。问题是,方法的可及性和一些关键方法的"最终"条款使其陷入泥潭。

我尝试扩展BeanSerializerBase、JsonSerializer、BeanSerializer Modifier。

每次我都会遇到一些无法理解的24参数构造函数或一些未记录错误的方法。

非常令人沮丧。

有人知道如何实现上述目标吗?

我使用的是springmvc,因此我需要一个通过ObjectMapper配置的可插入解决方案。我不想用json特定的注释或序列化逻辑污染我的模型或控制器对象

非常感谢。

N。

您可以为MyBean创建一个代理类,并使用它来代替MyBean。这不需要对原始类进行更改。您只需要将原始的MyBean对象替换为代理对象。虽然您可以在不需要MyBean接口的情况下使用,但使用接口更干净。

package org.mydomain;
public interface IMyBean{
    public String getFoo();
}
public class MyBean implements IMyBean,Serializable {
    private String foo;
    public void setFoo( String inValue ) {
        foo = inValue;
    }    
    public String getFoo() {
        return foo;
    }
}
public class MyBeanProxy implements IMyBean,Serializable {
    private IMyBean myBean;
    private String type;
    public MyBeanProxy(IMyBean myBean, String type){
        this.myBean = myBean;
        this.type = type;
    }
    public String getFoo() {
        return myBean.getFoo();
    }
    public String getType(){
        return type;
    }
}

最新更新