实体中的布尔字段更改 JSON 中的名称

Boolean field in entity changes name in JSON

我的应用程序中发生了一些奇怪的事情,我想知道原因。

我的 Spring 服务器中有一个使用后端服务构建的资源,当 JSON 到达前端时,属性 名称之一是不同的。我用断点跟踪了资源的整个构造,在返回查询之前,属性 名称从未从 isHiddenOnQuote 更改过 - 正如您可能怀疑的那样,它在对象模型中被定义为布尔值.我的数据库将值存储为 1 或 0。

当我的前端接收到 JSON 时,属性 名称更改为 hiddenOnQuote - “是”神奇地消失了。同样奇怪的是,我在 JSON 中还有其他布尔字段没有改变;他们保留了他们的“是”性。

这是模型的一个片段。请注意,这些属性中的 none 存在于超类 BaseEntity 中。

package com.company.app.model.sales;

import com.company.app.model.BaseEntity;
import lombok.Data;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

import javax.persistence.*;
import java.util.List;

@Data
@Entity
@SQLDelete(sql =
        "UPDATE product_option_category " +
                "SET is_deleted = true " +
                "WHERE id = ?")
@Where(clause = "is_deleted = false")

public class ProductOptionCategory extends BaseEntity {
    private String categoryName;

    private int optionLimit;

    private int mnSegment;

    private boolean isBitwise;

    private boolean areOptionsRepeatable = false;

    private boolean isHiddenOnQuote = false;

    public boolean getIsBitwise() {
        return isBitwise;
    }
}

这是龙目岛的东西吗?

如果 isBitwise 运行良好但 isHiddenOnQuote 运行不正常,那么您可能遇到了一个错误。

另外,注意到您没有使用来自 Lombok 的 @Getter 等注释。也许您可以尝试使用以下注释来强制使用正确的名称:

@get:JsonProperty("isHiddenOnQuote")

@param:JsonProperty("isHiddenOnQuote")

我从 Whosebug 上的这个答案中得到了这个:

编辑:修复了 属性 名称。

是的,Lombok 根据 Java 命名约定 (https://www.comp.nus.edu.sg/~cs2103/AY1617S1/contents/coding-standards-java.html) 为带有前缀“is”的原始布尔变量方法生成。 我们可以用 @Getter:

注释该字段
@Getter
private boolean running;

并且 Lombok 将使用其注解处理器在 class.

中生成一个 isRunning() 方法

有时,可能会发生冲突。 假设我们需要在相同的 class:

中包含以下行
@Getter
public boolean running = true;

@Getter
public boolean isRunning = false;

我们应该避免这样令人困惑的命名约定的原因有很多。其中之一是它为 Lombok 造成了冲突。

使用 Lombok 的约定,这两个字段将具有相同的访问器方法名称:isRunning。但是在同一个 class 中有两个同名的方法会产生编译错误。

Lombok 通过仅创建一个访问器方法来解决此问题,在本例中,根据字段声明顺序将其指向 运行。