为特定单个资源生成集合资源链接
Generate links for collection resources for a specific single resource
我编写了一个自定义控制器来处理 GET http://localhost:54000/api/v1/portfolios/{id}/evaluate
请求。
@RequestMapping(value = "/portfolios/{id}/evaluate", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> evaluate(@PathVariable Long id) {
Portfolio portfolio = portfolioService.evaluate(id);
if (portfolio == null) {
return ResponseEntity.notFound().build();
}
Resource<Portfolio> resource = new Resource<>(portfolio);
resource.add(entityLinks.linkForSingleResource(Portfolio.class, id).withSelfRel());
return ResponseEntity.ok(resource);
}
当前回复是
{
"summary" : {
"count" : 24.166666666666668,
"yield" : 0.14921630094043895,
"minBankroll" : -6.090909090909091,
"sharpeRatio" : 0.7120933654645042,
"worstReturn" : -2.4545454545454533,
"losingSeason" : 3,
"return" : 3.6060606060606077
},
"_links" : {
"self" : {
"href" : "http://localhost:54000/api/v1/portfolios/4"
}
}
}
但我想添加链接到该投资组合的馆藏资源(摘要和系统):
{
"summary": {
"count": 24.166666666666668,
"yield": 0.14921630094043895,
"minBankroll": -6.090909090909091,
"sharpeRatio": 0.7120933654645042,
"worstReturn": -2.4545454545454533,
"losingSeason": 3,
"return": 3.6060606060606077
},
"_links": {
"self": {
"href": "http://localhost:54000/api/v1/portfolios/4"
},
"portfolio": {
"href": "http://localhost:54000/api/v1/portfolios/4"
},
"summaries": {
"href": "http://localhost:54000/api/v1/portfolios/4/summaries"
},
"systems": {
"href": "http://localhost:54000/api/v1/portfolios/4/systems"
}
}
}
我没有找到使用 RepositoryEntityLinks 实体链接对象生成这些链接的方法
你总是可以这样做:
entityLinks.linkForSingleResource(Portfolio.class, id).slash("systems").withRel("systems");
如果您的系统端点是在自定义控制器方法中实现的,您可以使用 ControllerLinkBuilder
为您的控制器方法生成 link。假设您在 MyControllerClass 中使用 id 参数实现了 getSystems 方法 - 那么您可以像这样生成 link(linkTo 和 methodOn 是 ControllerLinkBuilder
中的静态方法):
linkTo(methodOn(MyControllerClass.class).getSystems(id)).withRel("systems");
我编写了一个自定义控制器来处理 GET http://localhost:54000/api/v1/portfolios/{id}/evaluate
请求。
@RequestMapping(value = "/portfolios/{id}/evaluate", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> evaluate(@PathVariable Long id) {
Portfolio portfolio = portfolioService.evaluate(id);
if (portfolio == null) {
return ResponseEntity.notFound().build();
}
Resource<Portfolio> resource = new Resource<>(portfolio);
resource.add(entityLinks.linkForSingleResource(Portfolio.class, id).withSelfRel());
return ResponseEntity.ok(resource);
}
当前回复是
{
"summary" : {
"count" : 24.166666666666668,
"yield" : 0.14921630094043895,
"minBankroll" : -6.090909090909091,
"sharpeRatio" : 0.7120933654645042,
"worstReturn" : -2.4545454545454533,
"losingSeason" : 3,
"return" : 3.6060606060606077
},
"_links" : {
"self" : {
"href" : "http://localhost:54000/api/v1/portfolios/4"
}
}
}
但我想添加链接到该投资组合的馆藏资源(摘要和系统):
{
"summary": {
"count": 24.166666666666668,
"yield": 0.14921630094043895,
"minBankroll": -6.090909090909091,
"sharpeRatio": 0.7120933654645042,
"worstReturn": -2.4545454545454533,
"losingSeason": 3,
"return": 3.6060606060606077
},
"_links": {
"self": {
"href": "http://localhost:54000/api/v1/portfolios/4"
},
"portfolio": {
"href": "http://localhost:54000/api/v1/portfolios/4"
},
"summaries": {
"href": "http://localhost:54000/api/v1/portfolios/4/summaries"
},
"systems": {
"href": "http://localhost:54000/api/v1/portfolios/4/systems"
}
}
}
我没有找到使用 RepositoryEntityLinks 实体链接对象生成这些链接的方法
你总是可以这样做:
entityLinks.linkForSingleResource(Portfolio.class, id).slash("systems").withRel("systems");
如果您的系统端点是在自定义控制器方法中实现的,您可以使用 ControllerLinkBuilder
为您的控制器方法生成 link。假设您在 MyControllerClass 中使用 id 参数实现了 getSystems 方法 - 那么您可以像这样生成 link(linkTo 和 methodOn 是 ControllerLinkBuilder
中的静态方法):
linkTo(methodOn(MyControllerClass.class).getSystems(id)).withRel("systems");