Java 关于JsonProperty的两个问题

Java 关于JsonProperty的两个问题,java,json,jackson,Java,Json,Jackson,问题1: 是 及 等价物 问题2: 如果我有一个字段没有出现在构造函数的参数中,比如: class Point { private int x; private int y; private int z; @JsonCreator public Point(@JsonProperty("x") int x, @JsonProperty("y") int y) { this.x = x; this.y = y;

问题1:

等价物

问题2:
如果我有一个字段没有出现在构造函数的参数中,比如:

class Point {
    private int x;
    private int y;
    private int z;
    @JsonCreator
    public Point(@JsonProperty("x") int x, @JsonProperty("y") int y) {
        this.x = x;
        this.y = y;
        z = 0;
    }
}

Jackson还知道该字段(z)及其值吗?

为了序列化/反序列化带有私有字段且没有正式getter/setter的类,我必须执行以下操作:

mapper.enable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
并为我的类定义一个私有默认构造函数,如下所示:

public class ElementDesc {
  @SuppressWarnings("unused")
  private ElementDesc() { this(null, null, false); }

  public ElementDesc(/* a regular constructor with parameters etc */) {
    ...
  }

  private final String field1;
  private final String field2;
  private final boolean field3;
}

在这种情况下,Jackson可以成功地序列化/反序列化类的实例,而不需要使用其常规构造函数和(访问器)方法(如果有)。

1。不,很可能它们不相等。第一个是要走的路。第二种情况需要一个默认构造函数,因为Jackson似乎不会试图从参数名猜测字段名。使用默认设置,Jackson只会忽略所有私有字段。
mapper.enable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
public class ElementDesc {
  @SuppressWarnings("unused")
  private ElementDesc() { this(null, null, false); }

  public ElementDesc(/* a regular constructor with parameters etc */) {
    ...
  }

  private final String field1;
  private final String field2;
  private final boolean field3;
}