Java 在RESTAPI中将客户详细信息添加到用户

Java 在RESTAPI中将客户详细信息添加到用户,java,spring,hibernate,rest,Java,Spring,Hibernate,Rest,我正在使用SpringBoot+hibernate制作一个书店RESTAPI,我不确定该如何继续。因此,首先创建用户(使用DTO不在此处发布): 然后他可以登录并搜索他感兴趣的书籍。当他想要订购书籍时(使用POST和包含书籍的JSON),他应该在我的客户实体中输入他的详细信息(使用DTO): 这是一个好方法吗?我不知道我如何才能链接用户与客户->客户有所有的细节,使一个订单,而用户是jsut注册的家伙,它的工作原理就像在5月网上商店,但我;我不确定我是否正确连接了它们,我的思维过程是否正常。有人

我正在使用SpringBoot+hibernate制作一个书店RESTAPI,我不确定该如何继续。因此,首先创建用户(使用DTO不在此处发布):

然后他可以登录并搜索他感兴趣的书籍。当他想要订购书籍时(使用POST和包含书籍的JSON),他应该在我的客户实体中输入他的详细信息(使用DTO):

这是一个好方法吗?我不知道我如何才能链接用户与客户->客户有所有的细节,使一个订单,而用户是jsut注册的家伙,它的工作原理就像在5月网上商店,但我;我不确定我是否正确连接了它们,我的思维过程是否正常。有人能详细解释一下吗

编辑: 澄清:

  • 用户注册并且只有电子邮件和密码-POST@/用户

  • 用户添加其客户详细信息(无地址)POST@/users/1/customer:找到当前登录的用户->添加客户在用户表中设置客户id(OneToOne连接)

  • 用户在@users/1/customer/address后添加其地址详细信息:找到当前登录的用户->通过customer\u id找到客户,然后通过address\u id添加地址并链接到客户


  • 所有3个都使用不同的DTO-这是一个好方法吗?

    我认为您可以重新建模您的实体:

    客户就是用户

    顾客买书

    创建具有默认属性的用户类。 扩展用户类以创建客户类并在其中添加额外字段。 创建一个Book类。 将Book类的ArrayList作为books添加到Customer类

    一旦用户登录,您就已经有了用户详细信息。为用户创建客户对象,并在用户作为客户填写时添加额外的详细信息,将所选书籍添加到客户对象,并将客户对象保存到数据库

       @Entity
    @Table(name = "app_user")
    public class User {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "user_id", nullable = false, updatable = false, unique = true)
      private Long id;
    
    
      @Column(name = "email", nullable = false, unique = true)
      private String email;
    
      @Column(name = "password_hash", nullable = false)
      private String passwordHash;
    
      @OneToOne
      @JoinColumn(name = "customer_id")
      private Customer customer;
    
      @Column(name = "role", nullable = false)
      @Enumerated(EnumType.STRING)
      private Role role;
    
      // jpa requirement
      public User() {
      }
    
      public Long getId() {
        return id;
      }
    
      public void setId(Long id) {
        this.id = id;
      }
    
      public String getEmail() {
        return email;
      }
    
      public void setEmail(String email) {
        this.email = email;
      }
    
      public String getPasswordHash() {
        return passwordHash;
      }
    
      public void setPasswordHash(String passwordHash) {
        this.passwordHash = passwordHash;
      }
    
      public Customer getCustomer() {
        return customer;
      }
    
      public void setCustomer(Customer customer) {
        this.customer = customer;
      }
    
      public Role getRole() {
        return role;
      }
    
      public void setRole(Role role) {
        this.role = role;
      }
    }
    
    @Entity
    @Table(name = "customer")
    public class Customer {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "customer_id", nullable = false, updatable = false, unique = true)
      private Long id;
    
      @Column(name = "first_name", nullable = false)
      private String firstName;
      @Column(name = "last_name", nullable = false)
      private String lastName;
      @Column(name = "phone_number", nullable = false)
      private String phoneNumber;
    
      @ManyToOne
      @JoinColumn(name = "address_id")
      private Address address;
    
      @OneToOne
      @JoinColumn(name = "user_id")
      private User user;
    
      // jpa requirement
      public Customer() {
      }
    
      public Long getId() {
        return id;
      }
    
      public void setId(Long id) {
        this.id = id;
      }
    
      public String getFirstName() {
        return firstName;
      }
    
      public void setFirstName(String firstName) {
        this.firstName = firstName;
      }
    
      public String getLastName() {
        return lastName;
      }
    
      public void setLastName(String lastName) {
        this.lastName = lastName;
      }
    
      public String getPhoneNumber() {
        return phoneNumber;
      }
    
      public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
      }
    
      public Address getAddress() {
        return address;
      }
    
      public void setAddress(Address address) {
        this.address = address;
      }
    
      public User getUser() {
        return user;
      }
    
      public void setUser(User user) {
        this.user = user;
      }