Работа с корневыми ресурсами, которые взаимосвязаны - PullRequest
2 голосов
/ 04 декабря 2010

Foo и Bar - оба Beans.

Если доступ к FooResource осуществляется через / foo / {id}, а BarResource - через / bar / {id}, а Foo относится к Bar, должен ли я вернуть URI для Bar илипросто идентификатор для бара?Я предполагаю, что URI.

Я инкапсулирую Foo в FooRepresentation и Bar в BarRepresentation, и эти типы на самом деле возвращаются (Foo | Bar) Ресурсом Джексону.В случае соответствующего Bar я использую UriBuilder, используя BarResource.class и foo.getBar (). GetId () для генерации URI.

Часть, где я поставлен в тупик, - это то, что лучше всего, если я хочуизменить то, на что ссылается Бар Фу.Таким образом, у меня есть URI для «новой» панели. Позволяет PUT или POST это foo / 1

. На данный момент я нахожусь в FooResource с методом, которому передают созданный параметр FooRepresentation.Для прямых свойств это имеет смысл, потому что я могу использовать внедренный FooRepository для объединения изменений.

Имеет ли смысл затем создать что-то вроде FooService, которое имеет метод setFooBar (Foo foo, Id barId) и вот гдевводятся несколько репозиториев?

Если нет, как мне перейти от URI -> BarResource -> Bar (не BarRepresentation) в запросе к FooResource?

Если бы я был в BarResource, я мог быиспользуйте UriInfo для извлечения параметра id, который также кажется более чистым, вместо простого анализа идентификатора из URI.Так есть ли способ получить экземпляр BarResource, который будет соответствующим образом вставлять элементы @Context, такие как UriInfo, из FooResource?

1 Ответ

0 голосов
/ 19 ноября 2011

Придерживаясь Джерси, я решил:

Для данного корневого класса ресурсов убедитесь, что у него есть функция receiveX (), которая может использовать сервис для получения экземпляра упомянутого объекта через PathParams. Это возвращает фактическую сущность домена, а также выдает исключение 404. Если не ноль.

Тогда другой класс будет принимать URI, использовать ResourceContext для получения экземпляра ресурса, а затем использовать receiveX для получения сущности. При этом работает любая взаимосвязь между сущностями (которая выражается только через корневые сущности). Это не самое лучшее и определенно наименее удобная часть всего, что я делаю в Джерси, но это работает.

...