春天数据休息后子资源

问题描述:

我使用spring data rest并要发布一个新的资源和他们及其子resource.Both是新的资源,所以没有链接指向任them.In事实上,以下JSON是一个合理的json,我认为要发布新资源及其子资源。春天数据休息后子资源

这里是一个JSON代表一个新来的学生。

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

这个学生的details是子资源,并在数据库中不存在。

我如何张贴约翰和他的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是自动递增的,我要发布一个新的学生和他的细节信息在同一个请求(我认为这是友好的用户)

+0

你可以分享你的POJO和你的休息回购? ! –

春天没有一流的支持对于子资源(JAX-RS)。您将不得不从客户端执行2个呼叫,或者在服务器上处理它。从你的问题不清楚如何details可以是一个资源;它没有ID。体重和身高并不能唯一识别一个人。看来你的设计是错误的,或者你需要提供更多的信息。

+0

感谢您的回答两个电话将是一个妥善的解决办法,但我很好奇,如何处理它的server.According到[春季数据REST - 参考文献](https://docs.spring.io/spring-data/REST /文档/电流/参考/ HTML),我所知道的唯一方法是关闭保存方法写一个'StudentController'它处理POST和补丁request.Do你有类似的代码发布资源,在一个新的子资源要求 – john

+0

@john提取一些字段作为学生的详细信息有什么意义?我没有看到任何重用。 –

+0

其实,这是一个测试演示,但我认为这是meaningful.Sometimes有一些信息可以用键值。因此定制,用户可以添加更多的信息,如重量:130和高度:175 – john