仅使用Jackson涉及的一个类反序列化循环JSON

时间:2016-07-19 12:45:23

标签: java json jackson

是否可以使用Jackson反序列化以下类?

因此问题的原始版本并不完全准确。这是重现问题的最小例子。

import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.fasterxml.jackson.databind.ObjectMapper;

@JsonIdentityInfo(
  generator = ObjectIdGenerators.IntSequenceGenerator.class,
  property = "id")
public class Thing {

  public Thing thing;

  @JsonCreator
  public Thing(@JsonProperty("thing") Thing thing) {
    this.thing = thing;
  }

  public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();

    Thing cyclic = new Thing(null);
    cyclic.thing = cyclic;

    String serialised = mapper.writeValueAsString(cyclic);
    System.out.println(serialised);

    Thing deserialised = mapper.readerFor(Thing.class).readValue(serialised);
    System.out.println(deserialised.thing == deserialised);
  }
}

这会导致未解决的前向引用异常。问题似乎是杰克逊被告知使用带注释的构造函数,但由于循环依赖性,它不能。

1 个答案:

答案 0 :(得分:-1)

解决方案是添加默认构造函数,并删除@JsonProperty@JsonCreator注释。