我试图测试杰克逊。我有一个没有setter的类,也没有带params的构造函数(只有一个默认的构造函数和getter)。
代码如下:
public class BeanA {
private int attr1;
private int attr2;
public BeanA(){
}
public int getAttr1(){
return attr1;
}
public int getAttr2(){
return attr2;
}
}
我使用jackson
将json转移到BeanA
。jackson
可以正常使用。
我无法理解jackson
如何在没有setter和构造函数的情况下分配值。
答案 0 :(得分:2)
使用反射,直接指定字段。
内部做的例子:
Object o = BeanA.class.newInstance();
Field attr1 = BeanA.class.getDeclaredField("attr1");
attr1.setAccessible(true);
attr1.set(o, 42);
System.out.println(((BeanA) o).getAttr1());
答案 1 :(得分:2)
正如@JB用户所提到的,有各种配置和默认值杰克逊申请序列化/反序列化。看看下面的链接
http://wiki.fasterxml.com/JacksonFeaturesSerialization和 http://wiki.fasterxml.com/JacksonFeatureAutoDetect
如果您将功能“CAN_OVERRIDE_ACCESS_MODIFIERS”覆盖为false,您将收到预期的错误。