How to apply Spring Data projections in a Spring MVC controllers? -


is possible specify projection when calling data repository method directly? here's repository code - note not expose via rest, instead able call service or controller:

@repositoryrestresource(exported = false) public interface usersrepository extends pagingandsortingrepository<user, long> {      @query(value = "select u user u ....")     public page<user> findemployeeusers(pageable p); } 

then in controller this:

@preauthorize(value = "hasrole('role_admin')") @requestmapping(value = "/users/employee") public page<user> listemployees(pageable pageable) {     return usersrepository.findemployeeusers(pageable); } 

is there way specify projection findemployeeusers method when called directly above?

i realise code above might odd someone... possible expose repository via rest , put @preauthorize thing in repository. thought controller more right place security checks - more natural simpler test.

so, can projection thing somehow passed repository method called directly?

no it's not, projections applied result of query execution on case case basis. they're designed selectively applied domain types.

as of latest spring data fowler release train ga release projection infrastructure can used programmatically in spring mvc controllers. declare spring bean spelawareproxyprojectionfactory:

@configuration class someconfig {    @bean   public spelawareproxyprojectionfactory projectionfactory() {     return new spelawareproxyprojectionfactory();   } } 

then inject controller , use it:

@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);   } } 

see how of latest release page has map(…) method can used transform page content on fly. use jdk 8 lambda provide conversion step using projectionfactory.


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -