【发布时间】:2014-08-13 17:19:09
【问题描述】:
在工作中,我们为许多 REST API 提供服务,并且我们的代码库以相当有机的方式增长。
我们主要以rome:rome:1.0 artefact 服务ATOM+XML。因此,我们所有的资源方法都返回一个SyndFeed。
我们在 Jersey 2 中遇到的主要问题(在升级之前,我们在 Jersey 1.x 中也遇到过)是我们还没有找到一种方法来分离服务内容(资源的责任)和创建这些内容之间的关注点 超链接内容(我们业务层的职责+解析器尚未确定)。
现在,每个资源负责:
- 将我们的业务对象映射到它们的
SyndFeed表示 - 因此,解决所有自身/相关/内联链接也由资源直接完成
第 2 点目前是通过 Jersey 管理的 UriInfo(通过 @Context)实现的,从中派生了许多在公共资源超类中定义的垃圾 URI 解析器方法。
UriInfo 目前需要它的getBaseUriBuilder() 方法,允许我们构造路径。
因为 UriInfo 是 Jersey 管理的 bean,所以无法将所有这些 URI 解析器方法提取到一个或多个独立解析器中。
由于这个限制,目前没有办法从资源类中提取超链接内容创建(而是:一个永远增长的垃圾资源超类)。
到目前为止,您可能会想到 Jersey 2 的 declarative hyperlinking feature。
但是,据我了解文档,此功能在我的上下文中不起作用。事实上,@InjectLink 只能由 Resource 结果 bean 使用,并且我们的资源仅返回 SyndFeed 的实例,这是来自 rome:rome:1.0 的类!
是否有任何已知的非托管(即独立于 Jersey HK2)集中式服务来解决链接,还是我必须自己推出?
【问题讨论】:
标签: java rest hyperlink jersey-2.0