如何使用@RequestMapping向Spring MVC添加自定义HTTP方法/谓词

如何使用@RequestMapping向Spring MVC添加自定义HTTP方法/谓词,spring,spring-boot,http,spring-mvc,servlets,Spring,Spring Boot,Http,Spring Mvc,Servlets,我需要向URI添加一个自定义HTTP方法/动词。我需要这样的东西: @Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, Servl

我需要向URI添加一个自定义HTTP方法/动词。我需要这样的东西:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {


    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, CAPTURE");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            String captureHeader = request.getHeader("CAPTURE");
            if (StringUtils.isEmpty(captureHeader)) {
                response.setStatus(HttpServletResponse.SC_BAD_REQUEST);                   
            }else{
               chain.doFilter(req, res); 
            }
        }
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}
@RequestMapping(value=“/device”,method=“CAPTURE”)

简言之,这一要求需要发挥作用
curl-X捕获http://localhost:4591/device


据我所知,@RequestMapping只接受标准化的HTTP方法,那么我需要什么选项来实现这一点呢

你不能那样做。您必须使用标准化的HTTP方法。 您可以在不使用HTTP方法的情况下创建自定义端点,因此,每个请求都将被接受。(当然,遵循一些规则,但是,我想这不是问题的主题)

@RequestMapping(value=“/device”)

或者,您可以使用HTTP头来允许/阻止请求。您只需要在应用程序中创建一个过滤器。大概是这样的:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {


    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, CAPTURE");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            String captureHeader = request.getHeader("CAPTURE");
            if (StringUtils.isEmpty(captureHeader)) {
                response.setStatus(HttpServletResponse.SC_BAD_REQUEST);                   
            }else{
               chain.doFilter(req, res); 
            }
        }
    }

    @Override
    public void init(FilterConfig filterConfig) {
    }

    @Override
    public void destroy() {
    }

}

我想使用filter您将能够完成您试图完成的任务。

添加方法
CAPTURE
,并在Spring Boot 2.2.6中使用
HttpServlet