Spring MVC中的自定义HTTP方法
我正在尝试为处理COPY HTTP方法的资源创建自定义Spring MVC控制器。
@RequestMapping仅接受以下RequestMethod值:GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS和TRACE。
在Spring MVC Controller中是否有任何推荐的处理自定义HTTP方法的方法?
Servlet规范仅允许GET
, HEAD
, POST
, PUT
, DELETE
, OPTIONS
或TRACE
HTTP方法。 这可以在Servlet API的Apache Tomcat 实现中看到。
这反映在Spring API的RequestMethod
枚举中 。
您可以通过实现自己的DispatcherServlet
覆盖service
方法以允许COPY
HTTP方法 – 将其更改为POST方法,并自定义RequestMappingHandlerAdapter
bean以允许它来欺骗您。
像这样的东西,使用spring-boot:
@Controller @EnableAutoConfiguration @Configuration public class HttpMethods extends WebMvcConfigurationSupport { public static class CopyMethodDispatcher extends DispatcherServlet { private static final long serialVersionUID = 1L; @Override protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { if ("COPY".equals(request.getMethod())) { super.doPost(request, response); } else { super.service(request, response); } } } public static void main(final String[] args) throws Exception { SpringApplication.run(HttpMethods.class, args); } @RequestMapping("/method") @ResponseBody public String customMethod(final HttpServletRequest request) { return request.getMethod(); } @Override @Bean public RequestMappingHandlerAdapter requestMappingHandlerAdapter() { final RequestMappingHandlerAdapter requestMappingHandlerAdapter = super.requestMappingHandlerAdapter(); requestMappingHandlerAdapter.setSupportedMethods("COPY", "POST", "GET"); // add all methods your controllers need to support return requestMappingHandlerAdapter; } @Bean DispatcherServlet dispatcherServlet() { return new CopyMethodDispatcher(); } }
现在,您可以使用COPY
HTTP方法调用/method
端点。 使用curl
这将是:
curl -v -X COPY http://localhost:8080/method