【问题标题】:swagger shows attributes in a table as duplicateswagger 将表中的属性显示为重复
【发布时间】:2021-09-25 15:57:12
【问题描述】:

我试图创建一个关系数据库。我想将 User 表中的 id、email、password 和 phone 列添加到 Employer 和 Employee 表中。我创建了如下代码所示的结构。

package hasancanozbek.hrms.Entities.concretes;

import hasancanozbek.hrms.Entities.abstracts.User;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@AllArgsConstructor
@NoArgsConstructor

@Entity
@Table(name = "employers")
public class Employer {

    @Id
    @Column(name = "user_id")
    private int userId;

    @Column(name = "company_name")
    private String companyName;

    @Column(name = "company_website")
    private String companyWebsite;

    @Column(name = "verified")
    private boolean verified;

    @OneToOne
    @MapsId
    @JoinColumn(name = "user_id")
    private User user;
   }

package hasancanozbek.hrms.Entities.abstracts;
import com.fasterxml.jackson.annotation.JsonIgnore;
import hasancanozbek.hrms.Entities.concretes.Employer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Data
@AllArgsConstructor
@NoArgsConstructor

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "email")
    private String email;

    @Column(name = "password")
    private String password;

    @Column(name = "telephone")
    private String telephone;

    @OneToOne(mappedBy = "user")
    @PrimaryKeyJoinColumn
    @JsonIgnore
    private Employer employer;
}

但是在swagger ui中添加雇主时,每个属性显示2次。例如,employees 表有 company name 属性,这个属性在 swagger 中显示为 companyName 和 user.employer.companyName。我只想组合并显示相关表的属性以及用户表中的属性。我该如何解决? Swagger SS

【问题讨论】:

  • 在屏幕上一切似乎都很好,这是什么问题? user.employer.companyName称为占位符,输入值时会消失
  • 问题是我必须输入公司名称2次。其实我只需要在employee表中输入公司名称字段即可。但是,现在我需要为雇主表中的字段和 user.employer 字段输入两次相同的值。
  • Swagger 只是 Web 请求的测试者,并不是一个完整的网站。所以我不明白你为什么需要它
  • 我知道。无论如何,我的目标是在编写前端之前进行测试。但是,问题是我必须输入与上面提到的相同的值两次。通常公司有一个名称,但正如您在图片中看到的那样,我的代码同时具有 user.employer.companyName 和employer.companyName。我添加了 @Jsonignore 注释,但它仍然出现。其实我对swagger没有问题,问题出在jpa方面。
  • 您使用什么库来从代码生成 API 定义 - Swagger Core、Springfox 等等?

标签: java postgresql jpa swagger-ui


【解决方案1】:

我解决了这个问题。我从 javax.persistence 将这个注释添加到用户表中。

@Inheritance(strategy = InheritanceType.JOINED)

我从用户类继承了 Employer 类。 我在第 15 行的 @Table 下添加了以下注释。

@PrimaryKeyJoinColumn(name = "user_id", referencedColumnName = "id")

通过这种方式,我已将用户表(我的基表)中的 id 值分配给与其连接的表的 user_id 列。 name 参数是您要为其赋值的列,referencedColumName 参数是您在基表中的主键值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多