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 对象中的重复键值对的主要内容,如果未能解决你的问题,请参考以下文章

HTTP协议Ajax请求

从dataweave 2.0 Mule 4中的父JSON对象中提取JSON键值对的子集作为对象

JQuery中Ajax的基本用法

将json反序列化为键值对列表[重复]

java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。

javascript中数组取值的问题,如何取出键值对中的值?