2015-12-29 3 views
0

Я написал пользовательский контроллер для обработки запроса 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" 
    } 
    } 
} 

я не нашел путь к сгенерировать эти ссылки с объектом ObjectLinks объекта RepositoryEntityLinks

ответ

1

Вы всегда можете это сделать mething так:

entityLinks.linkForSingleResource(Portfolio.class, id).slash("systems").withRel("systems"); 

И если ваша система конечных точек реализуется в методе пользовательского контроллера вы можете использовать ControllerLinkBuilder, чтобы сгенерировать ссылку на метод контроллера. Допустим, вы внедрили метод getSystems с параметром id в MyControllerClass - тогда вы можете создать ссылку вроде этого (linkTo и methodOn - статические методы в ControllerLinkBuilder):

linkTo(methodOn(MyControllerClass.class).getSystems(id)).withRel("systems"); 
Смежные вопросы