2017-08-11 4 views
1

エンティティをリソースに変換する必要があるカスタムコントローラを作成しました。 @RepositoryRestResourceアノテーションを使ってリポジトリに注釈を付けました。私は、エンティティを埋め込まれた他のエンティティへのリンクを持つリソースにエンティティをシリアル化するカスタムコントローラからSpring Data RESTのデフォルト機能を呼び出す方法があるかどうかを知りたいと思います。Spring DATA REST - エンティティをデフォルトのスプリングインプリメンテーションを使用してカスタムコントローラのリソースに変換する方法

エンティティをハンドラメソッドから返すのではなく、リソースを返すことを望みます。

ありがとうございました。

+1

あなたが助けてくれたら答えを受け入れることを忘れないでください。) – Cepr0

答えて

1

非常に単純で、オブジェクト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を参照してください。

関連する問題