Foo和Bar都是Beans。
如果通过/ 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,那么我难倒的部分是最好的。所以我有“新”栏的URI ..让PUT或POST到foo / 1
此时我在FooResource中使用一个方法,该方法将一个构造的FooRepresentation参数传递给它。对于直接属性,这是有道理的,因为我可以使用注入的FooRepository来合并更改。
然后创建像FooService这样的方法setFooBar(Foo foo,Id barId)以及注入多个存储库的地方是否有意义?
如果不是,我如何从URI开始 - > BarResource - >在对FooResource的请求中禁止Bar(而不是BarRepresentation)?
如果我在BarResource中,我可以使用UriInfo来提取id参数,这也感觉更干净,而不仅仅是从URI中解析id。那么有没有办法获得一个BarResource实例,它将从FooResource中适当地注入@Context项目,如UriInfo?
答案 0 :(得分:0)
坚持泽西岛,我决心要做的是:
对于给定的根资源类,请确保它具有getsX()函数,该函数可以使用服务通过PathParams获取引用实体的实例。这将返回实际的域实体,如果不为null,也会抛出404异常。
然后另一个类将获取URI,使用ResourceContext获取资源的实例,然后使用obtainX获取实体。这样,实体之间的任何相互关系(仅通过根实体表达)都有效。这不是最好的,绝对是我在泽西岛所做的一切中最不舒服的部分,但它确实有效。