【问题标题】:How to add custom HTTP Method/Verb to Spring-MVC using @RequestMapping如何使用 @RequestMapping 将自定义 HTTP 方法/动词添加到 Spring-MVC
【发布时间】:2019-10-05 09:27:14
【问题描述】:

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

@RequestMapping(value = "/device", method = "CAPTURE")

简而言之,这个请求需要工作 curl -X CAPTURE http://localhost:4591/device

我的理解是 @RequestMapping 只接受标准化的 HTTP 方法,所以我有什么选择来实现这一点。

【问题讨论】:

标签: spring spring-boot http spring-mvc servlets


【解决方案1】:

你不能那样做。您必须使用标准化的 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() {
    }

}

我想使用过滤器你将能够做你想做的事情。

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2016-01-22
    • 2016-05-14
    • 2016-07-10
    • 2019-02-06
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多