![](/img/trans.png)
[英]POSTing a @OneToMany sub-resource association in Spring Data REST
[英]Spring Data Rest - Self link of association resource
这是GET-Reqeust的JSON响应:
{
...
"_links": {
"self": {
"href": "http://localhost:8080/persons/1"
},
"person": {
"href": "http://localhost:8080/persons/1{?projection}",
"templated": true
},
"anotherResource": {
"href": "http://localhost:8080/persons/1/anotherResource"
}
}
}
问题是,我需要具有“ anotherResource”的自链接。 代替:
"href": "http://localhost:8080/persons/1/anotherResource"
我需要像这样的链接:
"href": "http://localhost:8080/anotherResources/2"
我知道可以通过执行其他请求来实现它。 但是在我的情况下,此解决方案不切实际/不可能,我需要大量数据,并且对每个项目都执行额外的请求并不好。
有什么建议/解决方案吗?
您可以尝试将ResourceProcessor与RepositoryEntityLinks一起使用来构建所需的链接:
@Component
public class PersonResourceProcessor implements ResourceProcessor<Resource<Person>> {
private RepositoryEntityLinks entityLinks;
public PersonResourceProcessor(RepositoryEntityLinks entityLinks) {
this.entityLinks = entityLinks;
}
@Override
public Resource<Person> process(Resource<Person> resource) {
Person person = resource.getContent();
AnotherResource anotherResource = person.getAnotherResource()
Link link = entityLinks.linkForSingleResource(anotherResource).withRel("anotherResource");
resource.add(link);
return resource;
}
}
但是这里要小心,因为如果资源person
并不急于嵌套anotherResource
你可以赶上LazyInitializationException
(不知道,但检查,请...)或获得额外查询数据库,每person.getAnotherResource()
调用( 在N + 1个查询问题 )。 这就是为什么最好使用相对链接,例如“ / persons / 1 / anotherResource”。
您是否没有使用@RequestMapping注释来声明REST端点?
我将尝试使用不同的@RequestMapping调用来定义不同的端点。
这样,程序可以为/persons
提供一个RequestMapping,其中任何与人相关的动作都与其相应的端点相关联,并为/anotherresources
定义另一个“根”(强制引号,但是您肯定会到达我的/anotherresources
)映射。您可以在其中添加必要的端点。
如果您需要的只是更改用户在访问GET端点时收到的JSON,则可以对参数进行预处理并更新JSON,然后再将其实际发送回用户。
但是,当然,如果您重写JSOn而不用现有端点支持JSON中参数的新值,则用户在尝试访问该URI时会遇到麻烦。 如果仅需要形成JSON,我将假定/anotherresources
的端点已经存在。
有关@RequestMapping的详细信息,请确保访问Spring Docs网站 。
希望我能对您有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.