Springブート(Jacksonを使用)は、JSONドキュメントとJava POJOの間のオブジェクトマッピングを非常にうまく処理します。たとえば:POSTされたJSONとSpringブートのエンティティリレーション
{ id: 5, name: "Christopher" }
が受け入れられることができます。
@PostMapping("/students/{id}")
public Student Update(Long studentId, @RequestBody Student student) {
studentRepository.save(student);
return student;
}
と正確にマッピングされます。
public class Student {
private Long id;
private String name;
...
}
しかし、どのようなJSONでネストされたモデルは?
{ id: 5, name: "Christopher", grades: [ {id: 1, letter: 'A'} ] }
またはJSONのオプションモデルですか?
{ id: 5, name: "Christopher" }
(Purposefully leaving out 'grades', though it could be accepted.)
JSONで関連付けが削除されたことを示す(Railsの_destroyフラグを使用した例)か?
{ id: 5, name: "Christopher", grades: [ {id: 1, letter: 'A', _destroy: true} ] }
IDを省略して関連付けを作成していますか?
{ id: 5, name: "Christopher", grades: [ {letter: 'A-'} ] }
これらのアイデアをサポートしていますか?
「オプションのモデル」とは何かを言いたい場合は、オプションのとなります。 PojosでOptionalsを使うべきではありません。 –
必ずしもオプションのモデルではなく、JSONに含める必要があるかどうかは任意です。 「Student」に「Grades」のリストがありますが、学生の名前のみを更新したい場合は、毎回、「Grades」配列をPOSTする必要はありません。 – Christopher
データ転送オブジェクト(DTO)を使用して、問題を解決しました。また、シリアル化したくないフィールドに@JsonIgnoreアノテーションを追加することもできます。 –