2017-08-28 1 views
0

j'ai créé un BaseRepository qui se prolonge CrudRepository et qui est étiqueté avec @NoRepositoryBean. Tous mes autres dépôts s'étendent BaseRepository.Remplacer données de ressort sauvegarder méthode

Comment puis-je remplacer la méthode save dans mon BaseRepository pour avoir des messages d'erreur personnalisés? Par exemple, je dois attraper tous DataIntegrityViolationException pour montrer un message approprié sur le côté frontal. Toute aide appréciée.

MISE À JOUR

Par exemple, si vous créez Spring Endpoints (@Endpoint), vous pouvez créer une classe qui implémente org.springframework.ws.server.EndpointInterceptor où vous pouvez surveiller tout le trafic. Existe-t-il une classe similaire où je peux surveiller tout le trafic lié aux données?

+0

Pourquoi auriez-vous besoin de surcharger la méthode 'save' pour cela? Vous pouvez le faire dans votre service ou simplement utiliser un aspect pour le faire pour vous. –

+0

Et il est en fait impossible de le faire en écrasant la méthode de sauvegarde lors de l'utilisation de JPA, car la sauvegarde peut ne jamais être appelée et les exceptions sont levées lorsque la transaction est validée (vidage du EM) –

+0

Si je le remplace dans mon service, alors je devrait créer un service pour chaque référentiel que j'ai. Peut-être que je n'ai pas besoin de surcharger la méthode save mais une autre classe où passe tout le trafic lié au référentiel. – JamesLinux

Répondre

1

Comme décrit dans mon commentaire écrasant 'save' n'atteindra pas votre objectif. JPA pourrait jeter des exceptions partout dans votre code. C'est l'un des problèmes de JPA.

Je suppose que vous pourriez remplacer une méthode centrale de Spring pour atteindre votre objectif, mais ce n'est pas vraiment le fonctionnement de Spring.

A la place, vous enregistrez votre gestion des exceptions, elle est invoquée par Spring comme vous le souhaitez.

Il existe an article about this by Baeldung, ce qui semble prometteur et très apprécié par Google.

+0

Merci beaucoup, cette partie: "Nouvelle solution 3 - Le nouveau @ControllerAdvice (printemps 3.2 et ci-dessus)" a résolu mon problème. – JamesLinux