“ persistent”字段是否应出现在序列化的PanacheEntity中?

时间:2019-03-18 18:33:46

标签: orm jackson quarkus

我正在用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是​​否应该这样做,或者其他人是否有此问题。

2 个答案:

答案 0 :(得分:1)

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

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

Jackson自动采用所有get*is*方法,并尝试对其进行序列化并包括结果JSON。无法在quarkus级别进行配置。具有JsonIgnoreMixIn功能的解决方案是不错的选择。

答案 1 :(得分:0)

在Json-B中添加您的实体:

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