2016-05-19 4 views
8

Ich kann keine @UUID (oder ähnliche) Annotation zur Validierung von Eingabeparametern in einer Java Web App finden.Gibt es eine Uuid-Validator-Annotation?

Ich habe in

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

Wenn Sie die Validierung vornehmen möchten auf * * @ RestController ** Endpunkt, dann denke ich, einfacher ist es, nur den ** java.util.UUID ** Typ zu erwarten. Wenn es nicht möglich ist, den Wert von HTTP-Anfrage zu gültiger UUID abzubilden, dann lehnen Sie einfach die Anfrage ab :) –

Antwort

12

ja, bauen es selbst

@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

Danke @ Jaiwo99 Ich hatte gehofft, dass die Validierung von Uuids genug ist, so dass es bereits in Bibliotheken enthalten ist und ich nicht muss das Rad neu erfinden ... –

4

Die Lösung von Jaiwo99 funktioniert, aber ich konnte keine benutzerdefinierte Nachricht von außen setzen (sie wird von der Nachricht von @Pattern). Wenn Sie, dass, schlage ich vor, dass Sie einfach so etwas wie folgt verwenden:

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

Sie das Muster in einem gewissen statischen Endfeld Doppelarbeit vermeiden setzen können:

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}$"; 
}