Java 使用相互关联的根资源

Java 使用相互关联的根资源,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,Foo和Bar都是豆子 如果FooResource是通过/foo/{id}和/bar/{id}访问的,并且foo与bar相关,那么我应该返回bar的URI还是只返回bar的id?我假定URI是 我在FooRepresentation中封装了Foo,在BarRepresentation中封装了Bar,这些类型实际上是(Foo | Bar)资源返回给Jackson的。对于相关栏,我使用UriBuilder,使用BarResource.class和foo.getBar().getId()生成URI 我

Foo和Bar都是豆子

如果FooResource是通过/foo/{id}和/bar/{id}访问的,并且foo与bar相关,那么我应该返回bar的URI还是只返回bar的id?我假定URI是

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

我被难倒的部分是,如果我想更改Foo引用的条,那么什么才是最好的。所以我有了“新”栏的URI。。让我们把它放到foo/1上

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

然后创建类似FooService的东西,它有一个方法setFooBar(Foo-Foo,Id-barId)并且多个存储库就是在这里注入的,这有意义吗

如果否,如何从请求中的URI->BarResource->Bar(而不是BarRepresentation)转到FooResource


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

坚持Jersey,我决定做的是:

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


然后另一个类将获取URI,使用ResourceContext获取资源的实例,然后使用obtainX获取实体。这样,实体之间的任何相互关系(仅通过根实体表示)都可以工作。这并不是我在泽西所做的一切中最好的,也绝对是最不舒服的部分,但它确实有效。

坚持泽西,我决心做的是:

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


然后另一个类将获取URI,使用ResourceContext获取资源的实例,然后使用obtainX获取实体。这样,实体之间的任何相互关系(仅通过根实体表示)都可以工作。这并不是我在泽西岛做的所有事情中最好的部分,也绝对是最不舒服的部分,但它很有效。

似乎我可能需要使用泽西岛特有的ResourceContext:我希望从JAX-RS内部获得一些东西。我在周一上班之前也没有测试过它,似乎我可能需要使用Jersey特定的ResourceContext:我希望从JAX-RS中得到一些东西。我也在周一的工作之前没有测试过这一点,然后会更新我的发现。