У меня есть класс с аннотацией @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
) - ни один из них работа в реальности - просто аналогия того, что мне нужно.Спасибо!