Переопределение @Path в Джерси - PullRequest
2 голосов
/ 21 апреля 2010

Я пытался создать приложение на Джерси, которое использует следующую структуру из пути:

Пример 1 (http: // опущен из-за ограничений стекопотока) example.com/source/{source-id}/ example.com/source/

С кодом (обработка ошибок и ненужный код опущены):

С кодом (сумма):

@Path("/source/")
public class SourceREST {
...
 @GET
 public Response getSource() {
  return Response.ok("Sources List (no field)").build();
 }

 @GET
 @Path("/{source-id}")
 public Response getSource(@PathParam("source-id") String sourceID) {
  return Response.ok("Source: " + sourceID).build();
 }

}

Работает нормально.

Пример 2: example.com/data/{source-id}/{info-id}/ example.com/data/{source-id}/

С кодом (обработка ошибок и ненужный код опущены):

@Path("/data/")
public class DataREST {
...

 @GET
 @Path("/{source-id}")
 public Response getContext(@PathParam("source-id") String sourceID) {
  return Response.ok("Source: " + sourceID + " Last ContextInfo").build();
 }

 @GET
 @Path("/{source-id}/{data-id}")
 public Response getContext(@PathParam("source-id") String sourceID, 
   @PathParam("data-id") String dataID) {
  return Response.ok("Source: " + sourceID + " Data: " + dataID).build();

 }
}

В примере 2 я могу получить доступ к URL-адресу, например example.com/data/111/222/, но попытка получить hexample.com/data/111/ дает мне код ошибки 405 (метод запрещен). Я также попытался создать целый метод, который проверяет, является ли {data-id} пустым или пустым, и в этом случае обрабатывает петицию, как в первом методе, но также не работает.

Есть идеи?

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 мая 2010

Я только что вставил ваш пример 2 в ресурс, и, похоже, он работает нормально. Я использую Джерси 1.1.5.

Ниже приведены результаты моих тестов.

http://localhost:8090/MyHealth/helloworld/111

Source: 111 Last ContextInfo

http://localhost:8090/MyHealth/helloworld/111/

Source: 111 Last ContextInfo

http://localhost:8090/MyHealth/helloworld/111/222

Source: 111 Data: 222

http://localhost:8090/MyHealth/helloworld/111/222/

Source: 111 Data: 222
0 голосов
/ 21 апреля 2010

Вы можете попробовать использовать путь для корневого ресурса, например @Path("/data/{source-id}"). Тогда первый метод будет иметь аннотацию @GET, а второй - @GET @Path("{data-id}").

Более того, я бы предложил использовать разные имена методов (хотя они, вероятно, выполняют разные действия), но я не уверен, что это является причиной вашей проблемы.

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