杰克逊如何实现json转移到对象

时间:2016-04-21 05:32:31

标签: java json jackson

我试图测试杰克逊。我有一个没有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转移到BeanAjackson可以正常使用。

我无法理解jackson如何在没有setter和构造函数的情况下分配值。

2 个答案:

答案 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/JacksonFeaturesSerializationhttp://wiki.fasterxml.com/JacksonFeatureAutoDetect

如果您将功能“CAN_OVERRIDE_ACCESS_MODIFIERS”覆盖为false,您将收到预期的错误。