Json 对象中的重复键值对
Posted
技术标签:
【中文标题】Json 对象中的重复键值对【英文标题】:Repeated Key Value pair in Json object 【发布时间】:2018-07-28 17:04:35 【问题描述】:我还是 Spring-boot 的新手,我正在尝试创建一个具有角色列表的客户。我已经成功地为角色创建了一个实体,但是当我查询我的 Json 对象的主体时,我注意到一些重复,我不确定是什么原因造成的。
这是我的代码:
@Entity
@Table(name = "Roles",
uniqueConstraints =
@UniqueConstraint(columnNames = "RoleName")
)
public class Roles implements Serializable
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long roleID;
@NotBlank
public String RoleName;
@ManyToOne
@JoinColumn(name = "customerNumber")
private Customer customer;
public Roles()
public Roles(String RoleName)
this.RoleName = RoleName;
public String getRoleName()
return RoleName;
public void setRoleName(String RoleName)
this.RoleName = RoleName;
public long getRoleID()
return roleID;
当我在swagger中查询时,角色名称重复如下所示:
【问题讨论】:
我从来没有使用过 Spring 的猜测,但可能是因为同时拥有属性RoleName
和 getter/setter roleName
?
【参考方案1】:
您应该将字段 RoleName
重命名为 roleName
。
Spring 使用 jackson 库进行 json 序列化,它认为这是 2 个不同的属性。此外,pascal-case 字段命名在 java 中也不是常见的命名方式。
如果您需要RoleName
作为json 中的键,而不是roleName
,您可以使用jackson 注解:
@JsonProperty("RoleName")
private String roleName;
【讨论】:
重命名字段的理由将提高您的回答质量。 你提到的修复工作正常但是我仍然不明白为什么roleID也包含在Json对象中,因为它不是构造函数的一部分。 它找到getter方法getRoleID(),所以它认为roleID是属性。如果需要,可以将其排除:只需在 roleID 字段声明之前添加 @JsonIgnore 注释即可。以上是关于Json 对象中的重复键值对的主要内容,如果未能解决你的问题,请参考以下文章
从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象