如何解决当请求没有匹配的 API 时,为什么我的控制器调用不同的 API?
我正在做一个 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,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"
}
http://127.0.0.1:8080/employees/3
API 路径错误(employees/3)
{
"firstName": "Caption","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 调用的原因是什么?
解决方法
看起来您的类路径上有 Spring Data Rest。它将根据存储库自动连接路径。第二个响应是 HATEOAS 响应。
一个简单的测试是检查 maven/gradle。如果您看到 spring-data-rest,请将其注释掉并重试。
,没有不需要的 API 调用。这就是 HATEOS 响应的表示方式,如文档中所述:
超媒体的基本思想是用超媒体元素丰富资源的表示。最简单的形式是链接。它们指示客户端它可以导航到某个资源。相关资源的语义定义在所谓的链接关系中。
如上所述,尝试查找 spring boot hatos 依赖项并注释或删除它,然后它应该恢复到正常的 REST JSON 响应。
如果您使用的是 maven,请查找:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
如果您使用的是 gradle,请查找:
implementation 'org.springframework.boot:spring-boot-starter-hateoas'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。