实体中的布尔字段更改 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 通过仅创建一个访问器方法来解决此问题,在本例中,根据字段声明顺序将其指向 运行。
我的应用程序中发生了一些奇怪的事情,我想知道原因。
我的 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 通过仅创建一个访问器方法来解决此问题,在本例中,根据字段声明顺序将其指向 运行。