• Validation standard des beans : Validator

    La validation d’un bean (contrôle de surface, taille d’un champs, valeur obligatoire …etc) se fait bien souvent de façon manuelle dans une application.  La JSR 303 standardise ce concept de validation avec la notion de validator.

    Ca se passe ici : javax.validation.*. 

    Les dépendances Maven nécessaire: 

    <dependency>
       <groupId>javax.validation</groupId>
       <artifactId>validation-api</artifactId>
       <version>1.0.0.GA</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator-annotation-processor</artifactId>
      <version>4.1.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.5.6</version>
    </dependency>
    

     

    Un bean Personne bien décoré

     
    public class Personne{
    
    	@NotNull(message="le nom est obligatoire")
    	@Size(max=10)
    	private String nom;
    	@AssertTrue(message="il faut etre beau")
    	private boolean isBoGoss;
    	@Min(value=18, message= "Il faut avoir + de 18 ans")
    	private int age;
    	@Past
    	private Date datenaissance;
    	@Pattern(regexp="[0-9]{4}",message="code CB non valide desolé :-(")
    	private String codeCB;
    	
    	public String getNom() {
    		return nom;
    	}
    
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
    
    	public boolean isBoGoss() {
    		return isBoGoss;
    	}
    
    	public void setBoGoss(boolean isBoGoss) {
    		this.isBoGoss = isBoGoss;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public Date getDatenaissance() {
    		return datenaissance;
    	}
    
    	public void setDatenaissance(Date datenaissance) {
    		this.datenaissance = datenaissance;
    	}
    
    	public String getCodeCB() {
    		return codeCB;
    	}
    
    	public void setCodeCB(String codeCB) {
    		this.codeCB = codeCB;
    	}
    
    }
    
    

    L’écriture des annotations est très claire et intuitive. On peut également personnaliser le message en cas d’erreur. L’API se chargera donc de lire ces annotations et d’appliquer la règle qu’on lui aura spécifiée. Par exemple dans le cas de la date de naissance, l’API vérifiera que la date du bean est antérieure à la date courante.

    Validation du Bean

    public static void main(String[] args) throws ParseException {
    
    		Personne p = new Personne();
    		p.setNom("CADJEE");
    		p.setBoGoss(false);
    		p.setAge(16);
    
    		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    		String date="19/04/1984";
    		p.setDatenaissance(simpleDateFormat.parse(date));
    		p.setCodeCB("007");
    
    		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    		Validator validator = factory.getValidator();
    
    		Set<ConstraintViolation<Personne>> constraintViolations =validator.validate(p);
    		StringBuffer sbf = new StringBuffer();
    		if (constraintViolations.size() > 0) {
    			 sbf.append("Paramètres invalides : ");
    			for (ConstraintViolation<Personne> contraintes : constraintViolations) {
    				sbf.append(contraintes.getMessage()).append(" - ");
    
    			}
    
    		}else{
    			sbf.append(" tout est ok, circulez! ");
    		}
    
    		System.out.println(sbf);
    	}
    

    La validation passe par l’objet javax.validation.Validator. On récupère cette objet via la factory ValidatorFactory.  Le Validator stocke l’ensemble des erreurs dans un Set. Libre à nous de gérer ces messages à notre guise (Exception,Warning…etc).
    Sachez qu’il est également possible de créer notre propre contrainte et annotation de valisation. Je vous laisse découvrir tout cela dans l’excellent article: La validation des données

    Categories: Java

    Étiquettes : ,

    Comments are currently closed.