2014-09-11 3 views
1

Jackson을 사용하여 JSON으로 객체를 변환하려고하면이 예외가 발생합니다. com.fasterxml.jackson.databind.JsonMappingException : (참조 체인을 통해) 주기로 연결되는 직접 자체 참조

나는 매우 간단한 인터페이스를 가지고 그런

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 
} 

항목

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에 있습니다. 8080/게임

PS : 필수 자바 8 MongoDB를

Source code from Github을 다음 localhost로 귀하의 브라우저를 자바 : 당신이 재생하려는 경우, 그냥 REPO를 복제, 깨끗한 MVN이 & & MVN 간부를 설치`실행

+0

전체 예제를 게시 할 수 있습니까? 누락 된 코드 (가정)로 제공 한 코드를 사용할 때 예외가 발생하지 않습니다. –

+0

PBF의 항목에는 많은 항목이 있습니다. 그게 뭔가 관련이 있을까요? –

+0

그럴 가능성이 큽니다. 나는 그것을 시도하지 않았다. 객체는 자신에 대한 참조를가집니다. –

답변

0

나는 그것을 고칠 수 있었다.

인터페이스에서 제거해야했습니다.

그래서 지금은이

public interface Item extends SpreadSheet { 
} 

public class Civ implements Item { 
} 

문제는 내가 유형의 예를 문명 클래스에서 같은 객체를하였습니다처럼 보인다.

어쨌든 유형이 필요하지 않으므로 좋다고 생각합니다.