Comment appliquer le Printemps des Données de projections, au Printemps de contrôleurs MVC?
Est-il possible de spécifier projection
lors de l'appel de référentiel de données méthode directement? Voici référentiel de code - remarque, je ne voudrais pas exposer via REPOS, au lieu je voudrais être en mesure d'appeler à partir d'un service ou d'un contrôleur:
@RepositoryRestResource(exported = false)
public interface UsersRepository extends PagingAndSortingRepository<User, Long> {
@Query(value = "SELECT u FROM User u WHERE ....")
public Page<User> findEmployeeUsers(Pageable p);
}
Puis dans un contrôleur, je fais ceci:
@PreAuthorize(value = "hasRole('ROLE_ADMIN')")
@RequestMapping(value = "/users/employee")
public Page<User> listEmployees(Pageable pageable) {
return usersRepository.findEmployeeUsers(pageable);
}
Est-il un moyen de spécifier projection
pour findEmployeeUsers
méthode lorsqu'il est appelé directement, comme ci-dessus?
Je me rends compte que le code ci-dessus peut paraître bizarre pour quelqu'un... il serait possible d'exposer le référentiel via le REPOS et mettre le @PreAuthorize
chose dans le référentiel. La pensée contrôleur est le plus bon endroit pour faire des vérifications de sécurité - il est plus naturelle et plus simple à tester.
Donc, peut projection
chose d'une certaine manière, dans un référentiel méthode appelée directement?
Vous devez vous connecter pour publier un commentaire.
Non ce n'est pas, d'autant que les projections sont généralement appliqués au résultat de l'exécution de la requête sur une base de cas par cas. Ainsi, ils sont actuellement conçus pour être appliqués de manière sélective à des types de domaine.
Que les dernières Données du Printemps Fowler libération train GA libération de la projection de l'infrastructure peut être utilisée par programme au Printemps contrôleurs MVC. Il suffit de déclarer un Printemps bean pour
SpelAwareProxyProjectionFactory
:Puis à l'injecter dans votre contrôleur et de l'utiliser:
Voir comment comme de la dernière version
Page
a unmap(…)
méthode qui peut être utilisée pour transformer le contenu de la page à la volée. Nous utilisons un JDK 8 lambda pour fournir une étape de conversion à l'aide de laProjectionFactory
.com.fasterxml.jackson.core.JsonGenerationException: Can not start an object, expecting field name
name
attribut de la@Projection
annotation? Comment fonctionne la recherche de travail dans la valeur par défaut JpaRepository implémentations? Est ce commentaire vaut une autre question?