【发布时间】:2022-02-06 08:46:32
【问题描述】:
我已经使用 Spring boot 制作了其余的 api。它有两个实体员工和部门。员工有部门对象,所以关系是多对一。它是单向的。部门没有员工名单。当我点击员工 GET 方法端点时,我得到了 com.fasterxml.jackson.databind.exc.InvalidDefinitionException 异常。请告诉我如何解决它。
员工类:
@Entity
@Table(name = "employees")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String firstName;
private String lastName;
private Integer salary;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="department_id",referencedColumnName = "id",nullable = false)
private Department department;
部门类:
@Entity
@Table(name = "departments")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
员工服务:
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
public List<Employee> getAllEmployees(){
return employeeRepository.findAll();
}
public Employee getEmployeeById(Integer id){
Optional<Employee> optionalEmployee = employeeRepository.findById(id);
if(optionalEmployee.isEmpty()){
throw new IllegalStateException("Department does not exists");
}
return optionalEmployee.get();
}
public Employee createEmployee(Employee employee){
return employeeRepository.save(employee);
}
员工控制器:
@RestController
@RequestMapping(path = "/employees")
public class EmployeeController {
private final EmployeeService employeeService;
@Autowired
public EmployeeController(EmployeeService employeeService) {
this.employeeService = employeeService;
}
@GetMapping
public List<Employee> getAllDepartments(){
return employeeService.getAllEmployees();
}
@PostMapping
public Employee createEmployee(@RequestBody Employee employee){
return employeeService.createEmployee(employee);
}}
【问题讨论】:
-
你必须把
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)注解在ManyToOne中 -
谢谢它正在工作。但是我可以将它访问到单独的端点,例如员工/ID/部门
标签: java spring spring-boot hibernate spring-data-jpa