代码之家  ›  专栏  ›  技术社区  ›  Pali

Spring Boot 2.2.5-不支持请求方法“MOVE”

  •  0
  • Pali  · 技术社区  · 4 年前

    我正在玩一个简单的springboot webapp,它被一些软件调用,它执行基本的文件下载/上传任务。

    我的应用程序无法通过我的应用程序发送以下请求:

    DEBUG Received [
    MOVE /database/1.tmp HTTP/1.1
    Destination: http://localhost:8080/database/1
    Host: localhost:8080
    
    ]
    

    结果是

    WARN Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'MOVE' not supported]
    

    MOVE 不是中的枚举 RequestMethod 所以我不能简单地用 method = RequestMethod.MOVE .

    我如何处理这个请求?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Pali    4 年前

    MOVE 方法:

    @Bean
    public HttpFirewall defaultHttpFirewall() {
        final StrictHttpFirewall firewall = new StrictHttpFirewall();
        Set<String> allowedHttpMethods = new HashSet<>();
        allowedHttpMethods.add(HttpMethod.DELETE.name());
        allowedHttpMethods.add(HttpMethod.GET.name());
        allowedHttpMethods.add(HttpMethod.POST.name());
        allowedHttpMethods.add(HttpMethod.PUT.name());
        allowedHttpMethods.add("MOVE");
        firewall.setAllowedHttpMethods(allowedHttpMethods);
        return firewall;
    }
    

    既然 请求将移交给应用程序,您的唯一方法(正如我发现的那样,没有自定义方法的控制器映射)是在筛选器中手动处理请求:

    @Component
    @Slf4j
    public class NonRESTFulHttpMethodRequestFilter implements Filter {
    
        @Override
        public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
            final HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    
            if ("MOVE".equals(httpServletRequest.getMethod())) {
                final HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
                log.trace("Ignoring 'MOVE {}' request with 200 OK", httpServletRequest.getRequestURI());
                httpServletResponse.setStatus(HttpStatus.OK.value());
            } else {
                filterChain.doFilter(servletRequest, servletResponse);
            }
        }
    }