2017-08-13 7 views
0

私はspring data restを使用しています。新しいリソースとそのサブリソースを投稿したいと思います。その両方が新しいリソースなので、どちらかを指すリンクはありません。実際、次のjson私は新しいリソースとそのサブリソースを投稿すると思う合理的なjsonです。spring data rest postサブリソース

ここにjsonは新しい生徒を表します。

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

この学生の学生はサブリソースであり、データベースには存在しません。

私はJohnと彼のdetailsを同時に(1つのjsonまたは1つのリクエストで)投稿するか、これを行うより適切な方法がありますか?

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

あなたのpojoとあなたの残りのレポを共有できますか? –

答えて

0

春の彼の詳細情報は、ファーストクラスをサポートしていません。サブリソース(JAX-RSは)のために。クライアントから2回の呼び出しを行うか、サーバー上で処理する必要があります。どのようにdetailsがリソースになることができるかは、あなたの質問からは分かりません。 idはありません。体重と身長は一意に特定されません。あなたのデザインが間違っているか、より多くの情報を提供する必要があります。

+0

あなたの答えをありがとう!2つの呼び出しが適切な解決策ですが、私はサーバー上でそれを処理する方法が不思議です。[Spring Data REST - Reference Documentation](https://docs.spring.io/spring-data)/rest/docs/current/reference/html)、私が知っている唯一の方法はcloseメソッドを保存し、POSTとPATCHリクエストを処理する 'StudentController'を書くことです。リソースとその新しいサブリソースをリクエスト – john

+0

@john学生の詳細としていくつかのフィールドを抽出するのは何ですか?私は再利用を見ません。 –

+0

実際にはこれはテストデモですが、意味があると思います。時にはキー値でカスタマイズできる情報もありますので、130などの情報を追加できます:175と – john

関連する問題