如何使用@RequestMapping 将自定义 HTTP Method/Verb 添加到 Spring-MVC
How to add custom HTTP Method/Verb to Spring-MVC using @RequestMapping
我需要向 URI 添加自定义 HTTP Method/Verb。我需要这样的东西:
@RequestMapping(value = "/device", method = "CAPTURE")
简而言之,这个请求需要工作
curl -X CAPTURE http://localhost:4591/device
据我了解,@RequestMapping 只接受标准化的 HTTP 方法,那么我有什么选择可以实现这一点。
你不能那样做。您必须使用标准化的 HTTP 方法。
您可以创建没有 HTTP 方法的自定义端点,因此,每个请求都将被接受。 (当然,遵循一些规则,但是,我猜这不是问题的主题)
@RequestMapping(value = "/device")
或者,您可以使用 HTTP headers 到 allow/block 请求。您只需要在您的应用程序中创建一个过滤器。像这样:
@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() {
}
}
我想使用过滤器你将能够做你想做的事。
我需要向 URI 添加自定义 HTTP Method/Verb。我需要这样的东西:
@RequestMapping(value = "/device", method = "CAPTURE")
简而言之,这个请求需要工作
curl -X CAPTURE http://localhost:4591/device
据我了解,@RequestMapping 只接受标准化的 HTTP 方法,那么我有什么选择可以实现这一点。
你不能那样做。您必须使用标准化的 HTTP 方法。 您可以创建没有 HTTP 方法的自定义端点,因此,每个请求都将被接受。 (当然,遵循一些规则,但是,我猜这不是问题的主题)
@RequestMapping(value = "/device")
或者,您可以使用 HTTP headers 到 allow/block 请求。您只需要在您的应用程序中创建一个过滤器。像这样:
@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() {
}
}
我想使用过滤器你将能够做你想做的事。