Джерси Получение HTTP 405, отображение пути не обработано, как ожидалось - PullRequest
1 голос
/ 12 октября 2011

У меня есть следующие 2 метода ...

@GET
@Path("/{solution}")
public Response test(@PathParam("solution") String solution,
        @Context UriInfo uriInfo, @Context HttpHeaders headers);

@GET
@Path("/{solution}/{path:[a-z0-9/\\-]*}")
public Response testTest(@PathParam("solution") String solution,
        @PathParam("path") String nodePath,
        @Context UriInfo uriInfo, @Context HttpHeaders headers);

Когда я вызываю / my-app / test / test, вызывается второй метод и параметры устанавливаются правильно.Когда я вызываю / my-app / test вместо вызова первого метода, я получаю HTTP 405 Method Not Found.Я предполагаю, что это сопоставление URL с одним из других методов, например.

@DELETE
@Path("{path: [a-z0-9/\\-]*}")
public Response deleteTest(@PathParam("path") String path, @Context HttpHeaders headers);

Кто-нибудь заметит, что я сделал неправильно?Кто-нибудь получил какие-либо советы, чтобы узнать, какой метод пытается сопоставить Джерси?

Спасибо.

1 Ответ

5 голосов
/ 13 октября 2011

Используя 3 метода, определенных выше, вы, по сути, имеете 3 ресурса:

  • / {решение}
  • / {решение} / {путь: [a-z0-9 /\ -] *}
  • {путь: [a-z0-9 / \ -] *}

Когда Джерси сопоставляет запрос к методам ресурса, он сначала определяет, какой ресурс (то есть шаблон URI) он должен быть сопоставлен.Третий является наиболее конкретным, который соответствует URL-адресу запроса, так что он совпадает.Только тогда Джерси проверяет, обрабатывается ли соответствующий метод HTTP для этого ресурса.Это соответствует спецификации JAX-RS - подробное описание алгоритма сопоставления можно найти в спецификации здесь: http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-360003.7.2

Итак, вам следует подумать о логических ресурсах, чтобы шаблоны URI соответствовалиих, а затем реализовать соответствующие методы HTTP для них.Т.е. если "/ {solution}" и "/ {solution} / {path: [a-z0-9 / \ -] *}" логически являются двумя разными ресурсами, и оба должны поддерживать @DELETE, вы должны определить две операции удаленияодин с первым шаблоном, а второй со вторым шаблоном URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...