2013-12-10 3 views
2

JRuby 1.7.4, Sinatra 1.4.4 및 Rack 1.5.2를 사용하여 간단한 웹 서비스를 만들었습니다. 이 웹 서비스는 GET, POST, PATCH 및 DELETE 요청에 "[요청 유형]을 사용하는 Hello World"라는 간단한 메시지로 응답합니다.JRuby, Sinatra, Warbler app - 501 오류로 HTTP PATCH 요청이 실패합니다.

랙을 시작하고 모든 요청 유형을 테스트했습니다. 네 명 모두 일했습니다.

Warbler를 사용하여 응용 프로그램의 war 파일을 만들고 Tomcat 7.0.47에 배포했습니다. Tomcat PATCH로 테스트했을 때 "HTTP Status 501 - 메서드 PATCH가이 URI에 대해이 서블릿에서 구현되지 않았습니다." (예, 'is not'가 반복됩니다.하지만 Tomcat에서 얻은 응답입니다.) GET, POST 및 DELETE가 정상적으로 작동했습니다.

그런 다음 Jetty 9.1.0을 사용해 보았습니다. 같은 결과. GET, POST 및 DELETE가 작동하지만 PATCH가 실패합니다.

왜 PATCH 요청이 실패하고이 설정으로 어떻게 작동하게합니까?

답변

1

Tomcat documentation에 따르면 HttpServlet을 단지 GET, POST는 PUT는

가 적합한 HTTP 서블릿을 작성하는 서브 클래스 화하는 추상 클래스를 제공합니다 이 GenericServlet을 확장 요청을

공공 추상 클래스 HttpServlet을 삭제 처리 할 수 ​​있습니다 웹 사이트의 경우 서블릿이 HTTP를 들어, HTTP GET은 HTTP의 PUT 요청 doDelete를 들어, HTTP POST 요청 doPut에 대한의 doPost를 요청 지원하는 경우

의 doGet, 요청을 삭제 : HttpServlet을의 서브 클래스는 일반적으로 적어도 하나의 방법, 이들 중 하나에서 오버라이드 (override) 할 필요가 있습니다

그러나 당신이 찾을 수있는이 유용한 : 당신이 무시하거나 임의의 HTTP 메소드 이름을 설정하는 것을 허용하지 않는 HTTP 라이브러리를 사용하는 경우

, 당신은 POST 요청 및 P를 보낼 수 있습니다 쿼리 문자열 매개 변수 _HttpMethod를 통해 HTTP 메서드로 재정의하십시오.

예를 들어, 계정을 업데이트하려면,이 실제 POST 요청과 함께 작동합니다

.../services/data/v23.0/sobjects/Account/0016000000eEhmxAAC?_HttpMethod=PATCH 
+0

유사한 제안은 친구가되었다. 그러나 들어오는 요청을 제어하지 않으며 수정할 수 없습니다. –