Почему я получаю ошибку переполнения стека при использовании Джексона даже при использовании @JsonIgnoreProperties

Как насчет добавления некоторых статических методов преобразования?

class C {
  private:
    static B transform1(D&);
    static B transform2(D&);
  public:
    A a;
    C(D d) :
      a{transform1(d),transform2(d)}
      {}
};

Связано:

1
задан mclaus 5 March 2019 в 21:16
поделиться

2 ответа

Этот класс генерирует циклы, когда вы запускаете их методы получения. Чтобы их сломать, нужно использовать аннотацию 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, представляющий ваше дерево, готовое к сериализации и без циклов.

0
ответ дан Michał Ziober 5 March 2019 в 21:16
поделиться

Как указано в документации Джексона: https://fasterxml.github.io/jackson-annotations/javadoc/2.6/com/fasterxml/jackson/annotation/JsonProperty.html

< blockquote>

public @interface JsonProperty

Аннотация маркера, которую можно использовать для определения нестатического метода в качестве «установщика» или «получателя» для логического свойства (в зависимости от его сигнатуры) или не -статическое поле объекта, которое будет использоваться (сериализовано, десериализовано) в качестве логического свойства.

Я думаю, что вы аннотировали методы, которые не являются установщиками или получателями свойств.

Например:

@JsonProperty("previousNode")
    abstract DefaultMutableTreeNode getPreviousNode();

Этот метод, похоже, не получает свойства, вместо этого он вычисляет узел. Попробуйте удалить все аннотации к методам, чтобы посмотреть, решит ли это проблему.

0
ответ дан JFPicard 5 March 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: