非常に単純で、オブジェクトResource
またはResources
を使用しています。たとえば - このコントローラでは、我々が列挙されているすべてのユーザロールのリストを返すカスタムメソッドを追加:あなたはたとえば、オブジェクトRepositoryEntityLinks
を使用する必要がリソースへのリンクを追加するには
@RepositoryRestController
@RequestMapping("https://stackoverflow.com/users/roles")
public class RoleController {
@GetMapping
public ResponseEntity<?> getAllRoles() {
List<Resource<User.Role>> content = new ArrayList<>();
content.addAll(Arrays.asList(
new Resource<>(User.Role.ROLE1),
new Resource<>(User.Role.ROLE2)));
return ResponseEntity.ok(new Resources<>(content));
}
}
を:
@RequiredArgsConstructor
@RepositoryRestController
@RequestMapping("/products")
public class ProductController {
@NonNull private final ProductRepo repo;
@NonNull private final RepositoryEntityLinks links;
@GetMapping("/{id}/dto")
public ResponseEntity<?> getDto(@PathVariable("id") Integer productId) {
ProductProjection dto = repo.getDto(productId);
return ResponseEntity.ok(toResource(dto));
}
private ResourceSupport toResource(ProductProjection projection) {
ProductDto dto = new ProductDto(projection.getProduct(), projection.getName());
Link productLink = links.linkForSingleResource(projection.getProduct()).withRel("product");
Link selfLink = links.linkForSingleResource(projection.getProduct()).slash("/dto").withSelfRel();
return new Resource<>(dto, productLink, selfLink);
}
}
もっと詳しくは、私の 'how-to'とsample projectを参照してください。
あなたが助けてくれたら答えを受け入れることを忘れないでください。) – Cepr0