JSON形式でツリー構造を保存してください。私はフィールドに対処する@JsonBackReference
と@JsonManagedReference
注釈を使用しますが、インターフェイスに再帰を解決する方法を何のアイデアを持っていないJSONシリアライズで循環参照を解決するにはどうすればよいですか?
public class CustomASTNode implements ASTNode {
private final CustomNode node; // simple property
private final ASTNodeID id; // simple property
@JsonBackReference
private final ASTNode parent; // circular property!
@JsonManagedReference
private List<ASTNode> children = new ArrayList<>(); // circular property!
// more code
}
public interface ASTNode extends Iterable<ASTNode> { // ?
// more code
}
:私はfolowingコードに
ERROR 6444 --- [nio-8090-exec-1] o.a.c.c.C.[.[.[/]. [dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError: null
at java.lang.Class.getGenericInterfaces(Class.java:912) ~[na:1.8.0_40]
at com.fasterxml.jackson.databind.type.TypeFactory._doFindSuperInterfaceChain(TypeFactory.java:1260) ~[jackson-databind-2.6.6.jar:2.6.6]
at com.fasterxml.jackson.databind.type.TypeFactory._findSuperInterfaceChain(TypeFactory.java:1254) ~[jackson-databind-2.6.6.jar:2.6.6]
// more stacktrace here...
を得ました。可能でしょうか、あるいはこれらのスニペットを書き直す必要がありますか?
循環参照がある場合、それは木ではありません。 –
@AndyTurnerはい、インターフェース定義( 'ASTNode extends Iterable')の循環参照については、 'parent'と' children'フィールドを使って 'CustomASTNode'オブジェクトからツリーを構築しています。 –
あなたのASTNodeのフォームはサイクルを持つグラフですか? – Pace