java - 实体中的布尔字段更改 JSON 中的名称
问题描述
我的应用程序中发生了一些奇怪的事情,我想知道原因。
我在我的 Spring 服务器中有一个使用后端服务构建的资源,当 JSON 到达前端时,其中一个属性名称是不同的。我在资源的整个构造中都使用了断点,并且在返回查询之前,属性名称从未改变过isHiddenOnQuote
- 正如您可能怀疑的那样,它被定义为对象模型中的布尔值。我的数据库将值存储为 1 或 0。
当我的前端收到 JSON 时,属性名称更改为hiddenOnQuote
- “is”神奇地消失了。同样奇怪的是,我在 JSON 中有其他布尔字段不变;他们保留了他们的“是”。
这是模型的一个片段。请注意,超类 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;
}
}
这是龙目岛的事情吗?
解决方案
是的,Lombok 根据 Java 命名约定(https://www.comp.nus.edu.sg/~cs2103/AY1617S1/contents/coding-standards-java.html)为带有前缀“is”的原始布尔变量方法生成。我们可以用 注释该字段@Getter
:
@Getter
private boolean running;
Lombok 将使用它的注解处理器在类中生成一个isRunning()
方法。
有时,可能会发生冲突。假设我们需要在同一个类中有以下几行:
@Getter
public boolean running = true;
@Getter
public boolean isRunning = false;
我们应该避免像这样令人困惑的命名约定有很多原因。其中之一是它为龙目岛制造了冲突。
使用 Lombok 的约定,这两个字段将具有相同的访问器方法名称:isRunning
. 但是在同一个类中有两个同名的方法会产生编译错误。
Lombok 通过只创建一个访问器方法来解决这个问题,在这种情况下,它根据字段声明顺序将其指向运行。
推荐阅读
- php - 如何在 json 响应中返回 javascript 变量并在文档上显示它们的值
- macos - 输出到新列 .CSV Shell
- html - 背景图像未在我的本地网站上呈现
- nuxt.js - nuxt 构建忽略 .nuxtignore
- python - ImportError:没有名为 api_core.exceptions 的模块
- java - @PropertyKey 注解不适用于 Kotlin,但适用于 Java
- algorithm - 搜索由非重叠矩形形成的最大区域的算法
- html - 自动换行后如何对齐图标和文本?
- kibana - 用于 kibana 的 nginx 反向代理
- sql - 我可以在查询中看到 Profiler 中的 TextData 吗?