弹簧数据休息后子资源

时间:2017-08-13 07:10:48

标签: java spring rest

我正在使用spring data rest并希望发布一个新资源及其子资源。它们都是新资源,因此没有指向其中任何一个的链接。实际上,以下json是合理的json我想发布新资源及其子资源。

这里是一个json代表一个新学生。

{
  "name": "John",
  "sex": "man",
  "details": [
    {
      "detailKey": "weight",
      "detailValue": 130
    },
    {
      "detailKey": "height",
      "detailValue": 175
    },
  ]
}
该学生的

details是子资源,不存在于数据库中。

我如何同时发布John和他的details(在一个json或一个请求中),或者有更合适的方法来做这个?

PS: Student

@Entity
@Table(name = "student", catalog = "test")
public class Student implements java.io.Serializable {

    // Fields

    private Integer id;
    private String name;
    private String sex;

    // Constructors

    /** default constructor */
    public Student() {
    }

    /** full constructor */
    public Student(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "name")
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name = "sex")
    public String getSex() {
        return this.sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}

StudentDetails上课

@Entity
@Table(name = "student_details", catalog = "test")
public class StudentDetails implements java.io.Serializable {

    // Fields

    private Integer id;
    private Integer studentId;
    private String detailCode;
    private String detailValue;

    // Constructors

    /** default constructor */
    public StudentDetails() {
    }

    /** full constructor */
    public StudentDetails(Integer studentId, String detailCode,
            String detailValue) {
        this.studentId = studentId;
        this.detailCode = detailCode;
        this.detailValue = detailValue;
    }

    // Property accessors
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name = "student_id")
    public Integer getStudentId() {
        return this.studentId;
    }

    public void setStudentId(Integer studentId) {
        this.studentId = studentId;
    }

    @Column(name = "detail_code")
    public String getDetailCode() {
        return this.detailCode;
    }

    public void setDetailCode(String detailCode) {
        this.detailCode = detailCode;
    }

    @Column(name = "detail_value")
    public String getDetailValue() {
        return this.detailValue;
    }

    public void setDetailValue(String detailValue) {
        this.detailValue = detailValue;
    }

}

StudentDetails用于自定义学生的信息。

两个id都是自动增量,我想在同一个请求中发布一个新学生和他的详细信息(我认为这对用户友好)

1 个答案:

答案 0 :(得分:0)

Spring没有对子资源的一流支持(JAX-RS可以)。您将要么必须从客户端进行2次调用,要么在服务器上处理它。从您的问题中不清楚details如何成为资源;它没有身份证明。体重和身高不能唯一地识别一个人。您的设计似乎是错误的,或者您需要提供更多信息。