Jersey @Path для множественных/одиночных существительных REST в одном классе

У меня есть класс с аннотацией @Pathпримерно так:

@Path("widgets")
@Produces(MediaType.APPLICATION_XML)
public class WidgetResource {

    @GET
    public Response getWidgets(@QueryParam("limit"))
    {
     //This class returns the plural noun, a list of widgets
    //...}

@GET
@Path("widget/{id}")
    public Response getWidgetById(@PathParam("id") long id)
    {
     //This class returns a single widget by id
    //...}

Когда я запускаю тестовый клиент, локальный хост/виджеты отображаются, как и ожидалось, но когда getWidgetById Метод сопоставляется с localhost/widgets/widget/{id}. Это не то, что я хочу - я хотел бы иметь localhost/widgets и localhost/widget/{id}

Я попытался опустить аннотацию @Pathна уровне класса, но это не позволяет Джерси распознавать этот класс как ресурс REST (я пробовал как ScanningResourceConfig, так и ClassNameResourceConfig— оба не смогли загрузить класс как ресурс, если не было @Path на уровне класса).

Я полагаю, что (уродливым) обходным путем было бы разделить методы между классами класса WidgetResourceи класса WidgetsResource. Я думаю, что это ужасное решение, так как оба этих метода совместно используют ресурсы в одном и том же классе, но мне действительно нужны REST-ful localhost/widget(для одного объекта) и localhost/widgets(во множественном числе).

Я что-то упустил? Есть ли какой-нибудь способ заставить Джерси выбрать класс как класс ресурсов, если я просто @Pathаннотирую методы (я не смог заставить его работать), если нет, могу ли я принудительно установить абсолютное отображение ( @Path(/widget/{id})) или некоторое относительное отображение ( @Path(../widget/id) - ни один из них работа в реальности - просто аналогия того, что мне нужно.Спасибо!

9
задан toniedzwiedz 27 April 2014 в 22:49
поделиться