我在做一个spring boot项目,它会产生奇怪的行为,例如:
我有两个API如下
控制器文件
@GetMapping("/list/employees")
public ResponseEntity<List<Employee>> getEmployees(){
List<Employee> list = employeeService.getAllEmployees();
return new ResponseEntity<List<Employee>>(list, new HttpHeaders(), HttpStatus.OK );
}
@GetMapping("employee/{id}")
public ResponseEntity<Employee> getEmployeeById(@PathVariable("id") long id) throws RuntimeException{
Employee employee = employeeService.getEmployee(id);
return new ResponseEntity<Employee>(employee,new HttpHeaders(),HttpStatus.OK);
}
服务文件
/* return all employees */
public List<Employee> getAllEmployees(){
List<Employee> listEmployee = employeeRepo.findAll();
if(listEmployee.size()>0){
return listEmployee;
}else{
return new ArrayList<Employee>();
}
}
/*
RETURN SINGLE EMPLOYEE BY ID
*/
public Employee getEmployee(long id) throws RuntimeException{
Optional<Employee> employee = employeeRepo.findById(id);
if(employee.isPresent()){
return employee.get();
}else{
new RuntimeException("Record not found");
}
return null;
}
但在《 Postman 》中运行它们会产生奇怪的结果,例如:
第二个api返回单身员工的正确行为
http://127.0.0.1:8080/employee/3
{
"id": 3,
"firstName": "Caption",
"lastName": "America",
"email": "cap@marvel.com"
}
同一个api的错误行为(我这次输入了错误的路径)
http://127.0.0.1:8080/employees/3
api路径错误(雇员/3)
{
"firstName": "Caption",
"lastName": "America",
"email": "cap@marvel.com",
"_links": {
"self": {
"href": "http://127.0.0.1:8080/employees/3"
},
"employee": {
"href": "http://127.0.0.1:8080/employees/3"
}
}
}
与根uri的行为相同,我没有使用home uri触发任何操作,但仍然像上面的api那样提供输出。
这些不需要的api调用的原因是什么?
2条答案
按热度按时间omqzjyyz1#
没有不需要的api调用。这就是hateos响应的表示方式,如文档中所述:
超媒体的基本思想是用超媒体元素丰富资源的表示。最简单的形式就是链接。它们表示可以导航到特定资源的客户机。相关资源的语义定义在所谓的链接关系中。
如上所述,尝试查找spring boot hateos依赖项并注解或删除它,然后它应该恢复到正常的rest json响应。
如果您使用的是maven,请查找:
如果您正在使用gradle,请查找:
mlmc2os52#
看起来您的类路径上有spring数据。它将根据存储库自动连接路径。第二种React是hateoasReact。
一个简单的测试就是检查maven/gradle。如果您看到spring数据rest,请将其注解掉并重试。