在工作中,我们提供许多REST API,我们的代码库已经以非常有机的方式发展。
我们主要使用rome:rome:1.0
artefact提供ATOM + XML。因此,我们所有的资源方法都返回SyndFeed
。
我们遇到的泽西岛2的主要问题(在升级之前我们还有泽西1.x)我们还没有找到一种方法来区分服务内容(资源的责任)和创建这些内容之间的关注点em>超链接内容(我们业务层的责任+解析器尚未确定)。
现在,每个资源都负责:
SyndFeed
表示 Point 2目前通过Jersey管理的UriInfo
(通过@Context
)实现,从中派生出许多垃圾URI解析器方法,这些方法在公共资源超类中定义。
UriInfo
方法需要{p> getBaseUriBuilder()
,允许我们构建路径。
因为UriInfo
是Jersey管理的bean,所以无法将所有这些URI解析器方法提取到一个或多个独立解析器中。
由于这种限制,目前无法从资源类中提取超链接内容创建(而是:将始终增长的垃圾资源超类)。
截至目前,您可能会想到泽西2的declarative hyperlinking feature。
但是,据我所知,这个功能在我的上下文中不起作用。实际上,@InjectLink
只能由资源结果bean使用,而我们的资源只返回SyndFeed
的实例,rome:rome:1.0
的类!
是否有任何已知的非托管(即独立于Jersey HK2)集中服务旨在解决链接或我是否必须自己推出?
答案 0 :(得分:0)
主要问题是“链接在资源中的位置”:
您当前的球衣资源方法会返回一个SyndFeed对象,但您应该能够:
另外,如果您使资源在该数据结构中注入UriInfo,那么您拥有编写链接所需的一切:
在这种情况下,提供者只需“跟踪链接定义中的内容”并且没有业务逻辑。资源是提供此类信息的责任,您也可以委托给您选择的另一类。