【发布时间】:2017-02-08 01:37:26
【问题描述】:
Spring Boot(使用 Jackson)可以很好地处理 JSON 文档和 Java POJO 之间的对象映射。例如:
{ 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-'} ] }
Spring Boot 是否支持这些想法?
【问题讨论】:
-
如果你的意思是“可选模型”,那么想想 Optional
什么的;你不应该在 Pojos 中使用 Optionals。 -
不一定是可选模型,只是可选模型是否应该在 JSON 中。如果“学生”有一个“成绩”列表,但我只想更新学生的姓名,我不想每次都发布他们的“成绩”数组。
-
我使用数据传输对象 (DTO) 来解决您描述的问题。您也可以在不想序列化的字段上添加@JsonIgnore 注解。