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,BeanSerializerModifier。
每次我遇到一些难以理解的24个参数构造函数或某些非/错误记录的方法。
非常令人沮丧。
任何人都知道如何实现上述目标?
我正在使用spring-mvc,因此我需要通过ObjectMapper配置的可插拔解决方案。我不想用json特定的注释或序列化逻辑来污染我的模型或控制器对象。
非常感谢。
<磷>氮答案 0 :(得分:-1)
您可以为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;
}
}