2013-12-10 1 views
2

Я создал простой веб-сервис с использованием JRuby 1.7.4, Sinatra 1.4.4 и Rack 1.5.2. Этот веб-сервис отвечает на запросы GET, POST, PATCH и DELETE простым сообщением «Hello world using [request-type]».JRuby, Sinatra, приложение Warbler - запрос HTTP PATCH не выполняется с ошибкой 501

Я начал Стойку и протестировал все типы запросов. Все четверо работали.

Я использовал Warbler для создания военного файла приложения и развернул его в Tomcat 7.0.47. Когда я протестировал с помощью Tomcat PATCH с «HTTP-статусом 501 - метод PATCH не был реализован этим сервлетом для этого URI». (Да, «нет» повторяется, но это ответ, который я получаю от Tomcat.) GET, POST и DELETE работали нормально.

Затем я попытался использовать Jetty 9.1.0. Тот же результат. GET, POST и DELETE, но PATCH не работает.

Почему запросы PATCH не выполняются и как я могу заставить их работать с этой настройкой?

ответ

1

По Tomcat documentation HttpServlet могут обрабатывать только GET, POST, PUT, DELETE Спросам

общественного абстрактного класс HttpServlet расширяет GenericServlet

Предоставляет абстрактный класс быть подклассами для создания HTTP-сервлета подходит для веб-сайта. Подкласс HttpServlet необходимо переопределить по мере одного способа, как правило, один из них:

doGet, если сервлет поддерживает HTTP GET запрашивает doPost, для HTTP POST запросов doPut, для запросов HTTP PUT doDelete, для HTTP DELETE запросы

Но вы можете найти это полезным:

Если вы используете библиотеку HTTP, которая не позволяет переопределение или установив произвольное имя метода HTTP, вы можете отправить запрос POST и р rovide a переопределить метод HTTP с помощью параметра строки запроса _HttpMethod.

Например, чтобы обновить учетную запись, это будет работать с запросом реальной POST:

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

Аналогичное предложение было сделано друга. Однако я не контролирую входящие запросы и не могу их изменить. –

Смежные вопросы