请求 GetMapping 的 PostMapping 错误
PostMapping errors asking for GetMapping
我正在尝试将数据保存到我的 Postgres 数据库中。这应该在方法上使用 PostMapping 注释,以便它相应地发送对象。但是,出于某种原因,它需要一个 "GET" 方法。任何想法,如果其他人有 运行 类似的问题。我也无法调试该方法。
Inventory.java
@RestController
public class InventoryController {
@Autowired
private InventoryService inventoryService;
@RequestMapping(value="/add", method=RequestMethod.POST)
public Inventory addItem(@RequestBody(required = false) Inventory item) {
System.out.print("This is a test");
return inventoryService.save(item);
}
@GetMapping(path="/test")
@ResponseBody
public String testMethod() {
return "Method works!";
}
}
堆栈跟踪
There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported
org.springframework.web.HttpRequestMethodNotSupportedException:
Request method 'GET' not supported at
org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:201)
at
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:421)
at
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367)
at
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:449)
at
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:67)
at
org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:393)
我已经在 "addItem" 方法上尝试了以下注释,它仍然 returns 上述痕迹。
- @RequestMapping(value="/add", method=RequestMethod.POST)
- @PostMapping(path="/add")
我是 运行ning Spring Boot 2.2.0.RELEASE
您不需要添加@ResponseBody,因为@RestController 是@Controller 和@ResponseBody 的组合。在将 API 端点移交给前端或移动团队之前,还要尝试使用类似 PostMan 的工具测试代码。
示例:
@RestController
@RequestMapping(value = "/users")
public class UserController {
...
...
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
有时如果我们通过 Id 获取任何特定资源,那么我们应该检查资源是否为空,而不是 return 空白对象或标准 NOT_FOUND 错误,我们可以使用从 ResponseEntityExceptionHandler 扩展的 @RestControllerAdvice 覆盖错误我们可以在控制器级别扩展所有错误。
但是如果资源服务器出现错误,那么在这种情况下我们必须在网络安全配置中添加入口点 -> http 安全方法覆盖并添加自定义入口点以及失败和成功处理程序。
不是请求GetMapping,错误说不支持请求方法'GET'。这意味着您为 HttpGet 方法调用端点,但您在控制器中定义的端点是 HttpPost 方法!
使用 curl 调用,应该如下所示:
curl -d "param1=value1¶m2=value2" -H "Content-Type: application/json" -X POST http://localhost:8080/add
我正在尝试将数据保存到我的 Postgres 数据库中。这应该在方法上使用 PostMapping 注释,以便它相应地发送对象。但是,出于某种原因,它需要一个 "GET" 方法。任何想法,如果其他人有 运行 类似的问题。我也无法调试该方法。
Inventory.java
@RestController
public class InventoryController {
@Autowired
private InventoryService inventoryService;
@RequestMapping(value="/add", method=RequestMethod.POST)
public Inventory addItem(@RequestBody(required = false) Inventory item) {
System.out.print("This is a test");
return inventoryService.save(item);
}
@GetMapping(path="/test")
@ResponseBody
public String testMethod() {
return "Method works!";
}
}
堆栈跟踪
There was an unexpected error (type=Method Not Allowed, status=405). Request method 'GET' not supported org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:201) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:421) at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:449) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:67) at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:393)
我已经在 "addItem" 方法上尝试了以下注释,它仍然 returns 上述痕迹。
- @RequestMapping(value="/add", method=RequestMethod.POST)
- @PostMapping(path="/add")
我是 运行ning Spring Boot 2.2.0.RELEASE
您不需要添加@ResponseBody,因为@RestController 是@Controller 和@ResponseBody 的组合。在将 API 端点移交给前端或移动团队之前,还要尝试使用类似 PostMan 的工具测试代码。
示例:
@RestController
@RequestMapping(value = "/users")
public class UserController {
...
...
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
有时如果我们通过 Id 获取任何特定资源,那么我们应该检查资源是否为空,而不是 return 空白对象或标准 NOT_FOUND 错误,我们可以使用从 ResponseEntityExceptionHandler 扩展的 @RestControllerAdvice 覆盖错误我们可以在控制器级别扩展所有错误。
但是如果资源服务器出现错误,那么在这种情况下我们必须在网络安全配置中添加入口点 -> http 安全方法覆盖并添加自定义入口点以及失败和成功处理程序。
不是请求GetMapping,错误说不支持请求方法'GET'。这意味着您为 HttpGet 方法调用端点,但您在控制器中定义的端点是 HttpPost 方法!
使用 curl 调用,应该如下所示:
curl -d "param1=value1¶m2=value2" -H "Content-Type: application/json" -X POST http://localhost:8080/add