2010-04-21 2 views
2

Я пытался сделать приложение-Джерси, который принимает следующую структуру с пути:Перекрытие @Path в Джерси

Пример 1 (Http: // пропущенный из-за ограничений StackOverflow) example.com/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} пустым или пустым, и в этом случае обрабатывает петицию как в первом методе, но не работает.

Любая идея?

Спасибо!

+0

Вы пробовали example.com/data/111 (без косой черты)? – Jonas

+0

Спасибо за вопрос, именно то, что я искал – Genry

ответ

1

Я только что вставил ваш пример 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

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

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

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