2016-05-19 18 views
8

Non riesco a trovare un'annotazione @UUID (o simile) per la convalida dei parametri di input in un'app web java.Esiste un'annotazione del validatore uuid?

Ho guardato finora in

  1. javax.validation.constraints
  2. org.hibernate.validator.constraints
+0

Se si vuole fare convalida * * @ Endpoint RestController **, penso che sia più facile aspettarsi solo il tipo ** java.util.UUID **. Se non sarà possibile mappare il valore dalla richiesta HTTP a UUID valido, allora basta rifiutare la richiesta :) –

risposta

12

Sì, costruire da soli

@Target(ElementType.FIELD) 
@Constraint(validatedBy={}) 
@Retention(RUNTIME) 
@Pattern(regexp="^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$") 
public @interface UUID { 
    String message() default "{invalid.uuid}"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 
} 
+2

Grazie @ Jaiwo99 Speravo che la convalida di uuid fosse abbastanza comune in modo che fosse già inclusa nelle librerie e io non bisogno di reinventare la ruota ... –

4

La soluzione di Jaiwo99 funziona, ma non sono riuscito a impostare un messaggio personalizzato dall'esterno (è sovrascritto dal messaggio da @Pattern). Se avete bisogno di questo, propongo di utilizzare semplicemente qualcosa di simile:

@Pattern(regexp = SomeUtilClass.UUID_PATTERN, message = "TokenFormatError") 
private String token; 

Si può mettere il modello in qualche campo finale statico per evitare duplicazioni:

public static SomeUtilClass { 
    public static final String UUID_PATTERN = "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$"; 
}