Должно ли "постоянное" поле появляться в сериализованном PanacheEntity? - PullRequest
2 голосов
/ 18 марта 2019

Я строю простой Jaxrs API в Quarkus. Когда я вызываю мой индексный метод, похоже, что Джексон сериализует объекты с полем persistent, полученное из PanacheEntityBase.

Пример:

[
    {
        "persistent": true,
        "id": 1,
        "createdAt": "2019-03-18",
        "updatedAt": "2019-03-18"
    },
    {
        "persistent": true,
        "id": 2,
        "createdAt": "2019-03-18",
        "updatedAt": "2019-03-18"
    }
]

Поле persistent не сохраняется в базе данных, но отображается в ответе. Я рассмотрел использование @jsonIgnore и Джексона Mixins, но я бы предпочел не делать этого, особенно если это просто проблема конфигурации. Мне любопытно, должен ли Panache делать это, или кто-то еще имеет эту проблему.

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это происходит, когда мы используем 3-rd party libraries в качестве возвращаемого типа данных и предоставляем его Jackson процессу сериализации. PanacheEntity extends PanacheEntityBase , который содержит isPersistent метод, который обрабатывается Jackson как POJO getter метод.

public boolean isPersistent() {
    return JpaOperations.isPersistent(this);
}

Jackson автоматически принимает все методы get* и is* и пытается сериализовать его и включить в результат JSON. Нет возможности настроить его на уровне quarkus. Ваше решение с функциями JsonIgnore и MixIn хорошо подходит.

0 голосов
/ 22 марта 2019

С Json-B добавьте свою сущность:

@JsonbTransient
public boolean isPersistent() {
    return super.isPersistent();
}
...