COPY HTTPメソッドを処理するリソース用のカスタムSpring MVCコントローラを作成しようとしています。Spring MVCのカスタムHTTPメソッド
@RequestMappingは、GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONSおよびTRACEの値のみを受け入れます。
Spring MVCコントローラでカスタムHTTPメソッドを処理する方法はありますか?
COPY HTTPメソッドを処理するリソース用のカスタムSpring MVCコントローラを作成しようとしています。Spring MVCのカスタムHTTPメソッド
@RequestMappingは、GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONSおよびTRACEの値のみを受け入れます。
Spring MVCコントローラでカスタムHTTPメソッドを処理する方法はありますか?
Servlet specificationのみGET
、HEAD
、POST
、PUT
、DELETE
、OPTIONS
又はTRACE
HTTPメソッドを可能にします。これはApache Tomcat implementation of the Servlet APIで見ることができます。
これはSpring APIのRequestMethod
enumerationに反映されています。
あなたはCOPY
HTTPメソッドを許可するようにservice
メソッドをオーバーライドし、独自のDispatcherServlet
を実装することにより、それらの周りにあなたの方法をカンニングすることができます - それはメソッドをPOSTするために変更し、同様にそれを許可するようにRequestMappingHandlerAdapter
Beanをカスタマイズします。春ブートを使用して、このような
何か、:
@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