我正在使用Spring Boot(版本-2.1.1)。我有一个通过rest api进行CRUD操作的一对多数据库模型。该模型如下所示。如何配置POST /departments
api(创建部门对象)以仅接受输入json正文中的组织ID?
@PostMapping
public Long createDepartment(@RequestBody Department Department) {
Department d = departmentService.save(Department);
return d.getId();
}
注意-我不想在创建部门时允许创建组织对象。
模型对象映射
@Entity
@Table(name="ORGANIZATIONS")
public class Organization{
@Id
@GeneratedValue
Private long id;
@Column(unique=true)
Private String name;
@OneToMany(mappedBy = "organization", fetch = FetchType.EAGER)
private List<Department> departments;
}
@Entity
@Table(name="DEPARTMENTS")
Public class Department{
@Id
@GeneratedValue
Private long id;
@Column(unique=true)
Private String name;
@ManyToOne(fetch = FetchType.EAGER)
private Organization organization;
}
谢谢!
答案 0 :(得分:2)
在我看来,最简单,最明智的方法就是利用DTO(数据传输对象)模式。
创建一个代表要输入的模型的类:
public class CreateDepartmentRequest {
private long id;
// getters and setters
}
然后在您的控制器中使用它:
@PostMapping
public Long createDepartment(@RequestBody CreateDepartmentRequest request) {
Department d = new Department();
d.setId(request.getId());
Department d = departmentService.save(d);
return d.getId();
}
旁注,它最好总是通过REST API返回JSON(除非您在API中使用其他格式),因此您还可以利用与我上面提到的相同的模式作为POST操作的结果返回正确的模型或一个简单的Map(如果您不想创建多个模型)。