com.fasterxml.jackson.databind.JsonMappingException:直接自引用导致循环(通过参考链)

时间:2014-09-11 18:35:13

标签: java json jackson

当我尝试使用Jackson将对象转换为JSON时,我收到此异常。

我有一个非常简单的界面

public interface Spreadsheet {

    ExcelSheet getSheetName();
}

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include= JsonTypeInfo.As.WRAPPER_OBJECT, property="type")
@JsonSubTypes({
        @JsonSubTypes.Type(value=Civ.class, name="civ"),
        @JsonSubTypes.Type(value=GreatPerson.class, name="greatperson"),
        @JsonSubTypes.Type(value=Wonder.class, name="wonder")
})
public interface Item<T> extends Spreadsheet {

//some methods
}

@JsonTypeName("civ")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "objectType")
public class Civ implements Item<Civ> {

//Implementation
}

然后使用Items

的类
public class PBF {
    private String id;

    private List<Player> players = Lists.newArrayList();
    private List<Item> items = Lists.newArrayList();
}

当我尝试使用此代码创建JSON时,我得到了标题

中定义的异常
 ObjectMapper mapper = new ObjectMapper();
 String json = mapper.writeValueAsString(pbf);

整个源代码都在Github上。如果你想重现,只需克隆回购,然后运行`mvn clean install&amp;&amp; mvn exec:java然后将浏览器指向localhost:8080 / games

PS:必需的Java 8和MongoDB

Source code from Github

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。

我不得不从界面中删除。

现在它看起来像这样

public interface Item extends SpreadSheet {
}

public class Civ implements Item {
}

问题是我在类型中的Civ类中有相同的对象。

我认为我不需要这种类型,所以我很好