"persistent" 字段应该出现在序列化的 PanacheEntity 中吗?

Should "persistent" field appear in serialized PanacheEntity?

我正在 quarkus 中构建一个简单的 Jaxrs api。当我调用我的索引方法时,它看起来像杰克逊使用 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 和 jackson mixins,但我宁愿不必这样做,尤其是如果这只是一个配置问题。我很好奇 Panache 是否应该这样做,或者其他人是否遇到了这个问题。

当我们使用 3-rd party libraries 作为返回数据类型并将其提供给 Jackson 序列化过程时,就会发生这种情况。 PanacheEntity extends PanacheEntityBase 其中包含 isPersistent 方法,Jackson 将其视为 POJO getter 方法。

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

Jackson 自动采用所有 get*is* 方法并尝试将其序列化并包含到结果 JSON 中。无法在 quarkus 级别配置它。您使用 JsonIgnoreMixIn 功能的解决方案是一个很好的方法。

使用 Json-B 添加您的实体:

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