Spring MVC 请求方法 'PATCH' 不支持
Spring MVC Request method 'PATCH' not supported
在 Spring MVC/Boot 中是否默认未启用 HTTP PATCH?我收到 ff 错误:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PATCH' not supported
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:213)
对于我的控制器:
@PatchMapping("/id")
public ResourceResponse updateById(@PathVariable Long id, ServletServerHttpRequest request) {
我的配置如下:
.antMatchers(HttpMethod.PATCH, "/products/**").hasRole("MANAGER")
...
configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH"));
我查看了SpringFrameworkServlet.java
的源码,PATCH有一些特别之处:
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpMethod httpMethod = HttpMethod.resolve(request.getMethod());
if (httpMethod == HttpMethod.PATCH || httpMethod == null) {
processRequest(request, response);
}
else {
super.service(request, response);
}
}
我已经用谷歌搜索了,但找不到任何可以帮助解决我的问题的东西。
谢谢。
标准 HTTP 客户端不支持 PATCH 请求。
您可以只将 apache HTTP 客户端添加到您的项目中。如果在类路径中找到它,它应该由 spring 引导自动添加。
我尝试了一个演示 spring 启动应用程序和补丁按预期工作。
您的代码中存在一个不相关的问题...您在 updateById
方法中使用 @PathVariable("id")
,而 URI 中没有 pathVariable
占位符。
我确实解决了问题,就我而言,我犯了一个错误,我写道
@PatchMapping(params = "/{id}", consumes = "application/json")
而不是:
@PatchMapping(path = "/{id}", consumes = "application/json")
在 Spring MVC/Boot 中是否默认未启用 HTTP PATCH?我收到 ff 错误:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PATCH' not supported
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:213)
对于我的控制器:
@PatchMapping("/id")
public ResourceResponse updateById(@PathVariable Long id, ServletServerHttpRequest request) {
我的配置如下:
.antMatchers(HttpMethod.PATCH, "/products/**").hasRole("MANAGER")
...
configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH"));
我查看了SpringFrameworkServlet.java
的源码,PATCH有一些特别之处:
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpMethod httpMethod = HttpMethod.resolve(request.getMethod());
if (httpMethod == HttpMethod.PATCH || httpMethod == null) {
processRequest(request, response);
}
else {
super.service(request, response);
}
}
我已经用谷歌搜索了,但找不到任何可以帮助解决我的问题的东西。
谢谢。
标准 HTTP 客户端不支持 PATCH 请求。
您可以只将 apache HTTP 客户端添加到您的项目中。如果在类路径中找到它,它应该由 spring 引导自动添加。
我尝试了一个演示 spring 启动应用程序和补丁按预期工作。
您的代码中存在一个不相关的问题...您在 updateById
方法中使用 @PathVariable("id")
,而 URI 中没有 pathVariable
占位符。
我确实解决了问题,就我而言,我犯了一个错误,我写道
@PatchMapping(params = "/{id}", consumes = "application/json")
而不是:
@PatchMapping(path = "/{id}", consumes = "application/json")