【问题标题】:Repeated Key Value pair in Json objectJson 对象中的重复键值对
【发布时间】: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

标签: java json spring-boot


【解决方案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 注释即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 2016-01-08
  • 2018-02-05
  • 2013-12-17
  • 2022-10-14
相关资源
最近更新 更多