java@PostMapping与多个RequestBody
我对JavaSpring非常陌生,有一个小问题
我不想将员工id(从员工实体)发送到身体部位的分配实体(邮递员)。目前它正在工作,因为我将employee_id作为PathVariable发送,并使用ResponseBy发送分配数据
@PostMapping("/add/{employee_id}")
public void addEmployee(@PathVariable(value = "employee_id", required = false) Long employee_id,
@RequestBody Assignment a) {
Employee employeeById = employeeRepository.findById(employee_id)
.orElseThrow(() -> new RuntimeException("Employee not found"));
a.setEmployee(employeeById);
assignmentRepository.addAssignment(a);
}
它正在使用urllocalhost:8080/add/35。35是员工id,分配数据可以在(邮递员)的正文中发送。我想做的是,在正文中也发送员工id(因此url应该是/add),但我无法让它工作
就像这样:
{
"employee_id": 35,
"title": "abc"
}
编辑:
任务。爪哇
public class Assignment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(optional = false)
@JoinColumn(name = "employee_id", nullable = false)
private Employee employee;
@Size(min = 3, max = 50)
private String assignment_title;
public Assignment() {
}
public Assignment(String assignment_title) {
super();
this.assignment_title = assignment_title;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAssignment_title() {
return assignment_title;
}
public void setAssignment_title(String assignment_title) {
this.assignment_title = assignment_title;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
分配服务。爪哇
public void addAssignment(Assignment e) {
AssignmentRepository.save(e);
}
AssignmentRepository。爪哇
public interface AssignmentRepository extends CrudRepository<Assignment, Integer>{
}
雇员。爪哇
public class Employee{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(optional = false)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@Size(min=3, max = 100)
private String title;
@Size(min=3, max = 50)
private String staff;
private Long degree;
public Employee() {}
public Employee( String title, String staff, Long degree) {
super();
this.title = title;
this.staff = staff;
this.degree = degree;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getStaff() {
return staff;
}
public void setStaff(String staff) {
this.staff = staff;
}
public Long getDegree() {
return degree;
}
public void setDegree(Long degree) {
this.degree = degree;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
雇员安置处。爪哇
public interface EmployeeRepository extends CrudRepository<Employee, Integer>{
Optional<Employee> findById(Long id);
}
提前谢谢你的帮助
# 1 楼答案
您需要确保您的主体类型
Assignment
具有如下属性然后用你的方法像
但这种实现并不尊重HTTP标准。 请考虑您的实际实现几乎尊重这些标准,并且您应该以这种方式重命名API:^ {CD2}} BR/> 本blog解释了这些标准
使用提供的规范进行编辑:
由于pathvariable是可选的,所以您尝试首先从url获取它,然后从body对象获取它
编辑2:可能会创建一个没有员工id的
Assignment
第一种情况:您接受任务可能没有员工
只需将您的关系从派遣更改为员工:
第二种情况:您希望首先创建一名新员工,然后将其绑定到您的分配中,因为
Assignment
应该始终具有Employee