2013-10-23 15 views
8

Quale annotazioni avrei dovuto usare per Hibernate convalida per convalidare una stringa da applicare al seguente:Come convalidare la stringa numerica come cifra con ibernazione?

//should always have trimmed length = 6, only digits, only positive number 
@NotEmpty 
@Size(min = 6, max = 6) 
public String getNumber { 
    return number.trim(); 
} 

Come posso applicare la convalida cifre? Dovrei semplicemente usare @Digits(fraction = 0, integer = 6) qui?

risposta

11

È possibile sostituire tutti i vincoli con un singolo @Pattern(regexp="[\\d]{6}"). Ciò implicherebbe una stringa di lunghezza sei in cui ogni carattere è una cifra.

6

È inoltre possibile creare la propria annotazione di convalida dell'ibernazione.
Nell'esempio seguente ho creato un'annotazione di convalida con nome EnsureNumber. I campi con questa annotazione verranno convalidati con il metodo isValid della classe EnsureNumberValidator.

@Constraint(validatedBy = EnsureNumberValidator.class) 
@Target({ ElementType.FIELD }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface EnsureNumber { 

    String message() default "{PasswordMatch}"; 

    Class<?>[] groups() default {}; 

    Class<? extends Payload>[] payload() default {}; 

    boolean decimal() default false; 

} 

public class EnsureNumberValidator implements ConstraintValidator<EnsureNumber, Object> { 
    private EnsureNumber ensureNumber; 

    @Override 
    public void initialize(EnsureNumber constraintAnnotation) { 
     this.ensureNumber = constraintAnnotation; 
    } 

    @Override 
    public boolean isValid(Object value, ConstraintValidatorContext context) { 
     // Check the state of the Adminstrator. 
     if (value == null) { 
      return false; 
     } 

     // Initialize it. 
     String regex = ensureNumber.decimal() ? "-?[0-9][0-9\\.\\,]*" : "-?[0-9]+"; 
     String data = String.valueOf(value); 
     return data.matches(regex); 
    } 

} 

Si può usare in questo modo,

@NotEmpty 
@Size(min = 6, max = 6) 
@EnsureNumber 
private String number1; 

@NotEmpty 
@Size(min = 6, max = 6) 
@EnsureNumber(message = "Field number2 is not valid.") 
private String number2; 

@NotEmpty 
@Size(min = 6, max = 6) 
@EnsureNumber(decimal = true, message = "Field number is not valid.") 
private String number3; 
Problemi correlati