java - 使用相互关联的根资源

标签 java rest jersey jax-rs

Foo 和 Bar 都是 Bean。

如果通过/foo/{id} 访问 FooResource 并通过/bar/{id} 访问 BarResource 并且 Foo 与 Bar 相关,我应该返回 Bar 的 URI 还是只返回 Bar 的 id?我假设 URI。

我把Foo封装在FooRepresentation中,Bar封装在BarRepresentation中,这些类型其实就是(Foo|Bar)Resource返回给Jackson的。对于相关的 Bar,我使用 UriBuilder,使用 BarResource.class 和 foo.getBar().getId() 生成 URI。

如果我想更改 Foo 引用的 Bar ,我感到困惑的部分是最好的。所以我有"new"栏的 URI .. 让 PUT 或 POST 到 foo/1

此时,我在 FooResource 中使用一个方法,该方法将构造的 FooRepresentation 参数传递给它。对于直接属性,这是有道理的,因为我可以使用注入(inject)的 FooRepository 来合并更改。

然后创建类似 FooService 的东西是否有意义,它有一个方法 setFooBar(Foo foo, Id barId) 并且这是注入(inject)多个存储库的地方?

如果不是,我如何在对 FooResource 的请求中从 URI -> BarResource -> Bar(不是 BarRepresentation)?

如果我在 BarResource 中,我可以使用 UriInfo 提取 id 参数,这感觉也更清晰,而不是仅仅从 URI 中解析 id。那么有没有一种方法可以从 FooResource 中获取一个 BarResource 实例,该实例将适本地注入(inject) @Context 项(例如 UriInfo)?

最佳答案

坚持 Jersey ,我决心要做的是:

对于给定的根资源类,确保它具有 obtainX() 函数,该函数可以使用服务通过 PathParams 获取引用实体的实例。这将返回实际的域实体,如果不为空,也会抛出 404 异常。

然后另一个类将获取 URI,使用 ResourceContext 获取资源实例,然后使用 obtainX 获取实体。有了这个,实体之间的任何相互关系(仅通过根实体表达)都有效。这不是最好的,而且绝对是我在 Jersey 所做的一切中最不舒适的部分,但它确实有效。

关于java - 使用相互关联的根资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352020/

相关文章:

java - Jersey REST api 多个资源

java - long 中非零四进制(基数为 4)的位数?

java - 无法解析方法 findViewById();添加admob时

WCF 休息 : remove prefix "ArrayOf" for wcf method response

java - REST API 单个请求 - 多个响应

url - 如何以 REST 风格获取只读资源与可编辑资源?

java - 如何使用Jackson ObjectMapper将多个数据转换为Pojo

java - 如何等待 HTTP 请求在 Java 中完成

java - 优化 ResultSet 获取性能(Apache Spring、MySQL)

java - 如何在 Jersey 资源方法中覆盖@JsonView