web-dev-qa-db-fra.com

Validation printanière vs validation Hibernate

Je suis confus entre les deux maintenant. Je sais que Hibernate Validator 6 est l'implémentation de référence pour les spécifications Bean Validation 2.0. Il prend en charge le groupement, l’internationalisation des messages d’erreur, les validations de méthodes personnalisées, etc. .. La question est la suivante: Spring 5 prend-il en charge ces fonctionnalités ou me reste-t-il seulement avec Hibernate Validator 6?

Pourquoi devrais-je utiliser Hibernate Validator avec mon projet Sprig Boot au lieu de la validation Spring fournie? Mon entreprise a besoin d'une justification pour utiliser une bibliothèque tierce.

Tous les exemples de référence en ligne suggèrent d'utiliser Hibernate Validator et rien de bien trouvé sur la validation Spring, veuillez conseiller ou pointer vers d'autres liens.

6
Nova Guy

selon documentation Spring Validation

Avec Bean Validation, une seule instance de javax.validation.Validator valide généralement tous les objets de modèle déclarant la validation contraintes. Pour configurer un tel validateur sauvegardé avec JSR-303 avec Spring MVC, ajoutez simplement un fournisseur de validation de bean, tel que Hibernate Validator, à votre chemin de classe

vous pouvez le vérifier en créant un exemple de projet spring-boot avec une dépendance spring-boot-starter-web. Il ajoute en fait une dépendance hibernate-validator dans votre chemin de classe

Voici quelques liens vers les tutoriels jsr-303:

  1. https://howtodoinjava.com/spring/spring-mvc/spring-bean-validation-example-with-jsr-303-annotations/

  2. https://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/

3
Alex M981

Hibernate Validation est l'implémentation de l'API JSR 303: Bean Validation. Spring a son package de validation (il prend en charge l’API de validation JSR 303: Bean mais n’est pas correctement implémenté).

Vous pouvez noter que org.springframework.validation.Validator est différent de javax.validation.Validator.

Vous pouvez effectuer la validation de ressort simplement en créant une classe implémentant org.springframework.validation.Validator aussi simple que ici Mais si vous devez suivre les spécifications de l'API JSR 303: Bean Validation, vous le faites via Hibernate Validator.

D'accord pour donner quelques détails supplémentaires. 

1) Si vous souhaitez effectuer une validation (partielle), vous pouvez le faire en utilisant spring . (Ci-dessous, un extrait):

import org.springframework.validation.Validator;

class MyService{
     Validator validator =  new MyValidator();
     //perform validation
    }
class MyValidator implements Validator{
    // Your own validation logic. You may use ValidationUtils to help. 

}

2) Si vous souhaitez effectuer une validation (spécification JSR 303), vous devez disposer d'un fournisseur similaire à Hibernate. 

import javax.validation.Validator;
class MyService{
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //Bootstraping
        Validator validator = factory.getValidator(); 
       //perform validation
}

Le processus d'amorçage ci-dessus, est pris en charge par Spring Framework. Tout ce que vous avez à faire est de laisser le printemps créer le haricot pour LocalValidatorFactoryBean 

<bean id="validator"   
 class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

et injecter cette fève. 

import javax.validation.Validator;

@Service
public class MyService {

    @Autowired
    private Validator validator;
}
0
sql_dummy