2 回答
TA贡献1860条经验 获得超8个赞
当您开始遍历他们的 getters 方法时,此类会生成循环。要打破它们,您需要使用JsonBackReference注释。你mixin可能看起来像这样:
@JsonIgnoreProperties(ignoreUnknown = true)
abstract class DefaultMutableTreeNodeMixIn {
@JsonCreator
public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject) {
}
@JsonCreator
public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject, @JsonProperty boolean allowsChildren) {
}
@JsonProperty("childCount")
abstract int getChildCount();
@JsonProperty("depth")
abstract int getDepth();
@JsonProperty("firstChild")
@JsonBackReference
abstract TreeNode getFirstChild();
@JsonProperty("firstLeaf")
@JsonBackReference
abstract DefaultMutableTreeNode getFirstLeaf();
@JsonProperty("lastChild")
@JsonBackReference
abstract TreeNode getLastChild();
@JsonProperty("lastLeaf")
@JsonBackReference
abstract DefaultMutableTreeNode getLastLeaf();
@JsonProperty("leafCount")
abstract int getLeafCount();
@JsonProperty("level")
abstract int getLevel();
@JsonProperty("nextLeaf")
abstract DefaultMutableTreeNode getNextLeaf();
@JsonProperty("nextNode")
abstract DefaultMutableTreeNode getNextNode();
@JsonProperty("nextSibling")
abstract DefaultMutableTreeNode getNextSibling();
@JsonProperty("parent")
abstract TreeNode getParent();
@JsonProperty("path")
@JsonBackReference
abstract TreeNode[] getPath();
@JsonProperty("previousLeaf")
abstract DefaultMutableTreeNode getPreviousLeaf();
@JsonProperty("previousNode")
abstract DefaultMutableTreeNode getPreviousNode();
@JsonProperty("previousSibling")
abstract DefaultMutableTreeNode getPreviousSibling();
@JsonProperty("siblingCount")
abstract int getSiblingCount();
@JsonProperty("isLeaf")
abstract boolean isLeaf();
@JsonProperty("isRoot")
abstract boolean isRoot();
}
但可能最好和最多的OOP方法是创建新的POJO,它代表你的树准备好序列化并且没有循环。
TA贡献1803条经验 获得超6个赞
公共@interface JsonProperty
标记注释,可用于将非静态方法定义为逻辑属性的“setter”或“getter”(取决于其签名),或用作逻辑属性的非静态对象字段(序列化、反序列化)财产。
我确实认为您已经注释了不是属性设置器或获取器的方法。
例如:
@JsonProperty("previousNode") abstract DefaultMutableTreeNode getPreviousNode();
这种方法似乎没有得到属性,而是在计算一个节点。尝试删除方法上的所有注释,看看它是否解决了问题。
添加回答
举报