我正在尝试将数据保存到我的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!";
}
}
Stacktrace
发生意外错误(类型=不允许使用方法,状态= 405)。 请求方法“ GET”不受支持 org.springframework.web.HttpRequestMethodNotSupportedException: 请求方法“ GET”不受支持 org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:201) 在 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:421) 在 org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:449) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getHandlerInternal(RequestMappingHandlerMapping.java:67) 在 org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:393)
我已经在“ addItem”方法上尝试了以下注释,但仍返回上述跟踪。
我正在运行Spring Boot 2.2.0.RELEASE
答案 0 :(得分:2)
这不是寻求GetMapping ,错误提示不支持请求方法“ GET” 。这意味着您调用HttpGet方法的终结点,但是在Controller中定义的终结点是HttpPost方法!
使用curl进行呼叫,应如下所示:
curl -d "param1=value1¶m2=value2" -H "Content-Type: application/json" -X POST http://localhost:8080/add
答案 1 :(得分:0)
您不需要添加@ResponseBody,因为@RestController是@Controller和@ResponseBody的组合。在将API端点移交给Frontend或移动团队之前,还请尝试从类似PostMan的工具中测试代码。
示例:
@RestController
@RequestMapping(value = "/users")
public class UserController {
...
...
@GetMapping
@PreAuthorize("hasRole('ADMIN')")
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
有时,如果我们通过ID获得任何特定的资源,那么我们应该检查资源是否为空,而不是返回空白对象或标准NOT_FOUND错误,我们可以使用ResponseEntityExceptionHandler扩展的@RestControllerAdvice覆盖该错误,并在控制器级别扩展所有错误。
但是如果资源服务器中出现错误,那么在这种情况下,我们必须在websecurity configure-> http安全方法中添加入口点,并添加自定义入口点以及失败和成功处理程序。