Spring MVC コントローラーで Spring Data プロジェクションを適用するにはどうすればよいでしょうか? 質問する

Spring MVC コントローラーで Spring Data プロジェクションを適用するにはどうすればよいでしょうか? 質問する

データ リポジトリ メソッドを直接呼び出すときに指定することは可能ですかprojection? リポジトリ コードは次のとおりです。REST 経由で公開するのではなく、サービスまたはコントローラーから呼び出せるようにしたいことに注意してください。

@RepositoryRestResource(exported = false)
public interface UsersRepository extends PagingAndSortingRepository<User, Long> {

    @Query(value = "SELECT u FROM User u WHERE ....")
    public Page<User> findEmployeeUsers(Pageable p);
}

次に、コントローラーで次の操作を実行します。

@PreAuthorize(value = "hasRole('ROLE_ADMIN')")
@RequestMapping(value = "/users/employee")
public Page<User> listEmployees(Pageable pageable) {
    return usersRepository.findEmployeeUsers(pageable);
}

上記のように直接呼び出される場合にメソッドprojectionを指定する方法はありますか?findEmployeeUsers

上記のコードは、人によっては奇妙に見えるかもしれないと認識しています... REST 経由でリポジトリを公開し、リポジトリにそのものを配置することは可能です@PreAuthorize。セキュリティ チェックを実行するには、コントローラーの方が適切な場所だと考えています。テストがより自然で簡単だからです。

それで、projection直接呼び出されるリポジトリ メソッドに何らかの方法で渡すことはできるのでしょうか?

ベストアンサー1

いいえ、そうではありません。特に、プロジェクションは通常、クエリ実行の結果にケースバイケースで適用されるためです。したがって、現在はドメイン タイプに選択的に適用されるように設計されています。

最新の Spring Data Fowler リリース トレインの GA リリースでは、投影インフラストラクチャを Spring MVC コントローラーでプログラム的に使用できます。次の Spring bean を宣言するだけですSpelAwareProxyProjectionFactory

@Configuration
class SomeConfig {

  @Bean
  public SpelAwareProxyProjectionFactory projectionFactory() {
    return new SpelAwareProxyProjectionFactory();
  }
}

次に、それをコントローラーに挿入して使用します。

@Controller
class SampleController {

  private final ProjectionFactory projectionFactory;

  @Autowired
  public SampleController(ProjectionFactory projectionFactory) {
    this.projectionFactory = projectionFactory;
  }

  @PreAuthorize(value = "hasRole('ROLE_ADMIN')")
  @RequestMapping(value = "/users/employee")
  public Page<?> listEmployees(Pageable pageable) {

    return usersRepository.findEmployeeUsers(pageable).//
      map(user -> projectionFactory.createProjection(Projection.class, user);
  }
}

最新リリースでは、ページ コンテンツをオンザフライで変換できるメソッドが提供されています。 を使用した変換手順を提供するために、JDK 8 ラムダを使用していPageます。map(…)ProjectionFactory

おすすめ記事