2017-02-21 2 views
0

Ich verwende Hibernate Validator zusätzlich zur javax.validation-Bibliothek, um Anfragekörper von Controllern in einer Spring MVC-Anwendung zu validieren. Es gibt Annotationen für Constraints, die bei Min- und Max-Grenzen helfen und auch bei der Anzahl der Stellen, aber ich konnte keine Möglichkeit finden, nur bestimmte Zahlen zu akzeptieren. Was ist zum Beispiel, wenn ich nur die Werte 10, 20 und 50 annehmen möchte?Validator, der nur bestimmte numerische Werte akzeptieren muss

Ich bin mir bewusst, dass es möglich ist, org.springframework.validation.Validator Schnittstelle zu verwenden, um komplexere Regeln zu erstellen. Eine andere Sache, die in den Sinn kam, ist ein Enum mit gewünschten numerischen Werten zu erstellen, aber es scheint nicht wie eine saubere Lösung. Ich bin neugierig zu wissen, ob es einen besseren, einfacheren Weg gibt, um das zu erreichen, was ich will.

Antwort

4

Sie können Ihre eigene Anmerkung erstellen, die mehrere Werte akzeptiert. Dies beinhaltet eine Annotation-Klasse und ein Validator-Klasse zu schreiben:

public class OneOfValidator implements ConstraintValidator<OneOf, Integer> {} 

Und die Anmerkung:

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Constraint(validatedBy = OneOfValidator.class) 
public @interface OneOf { 
    String message() default "value must match one of the values in the list"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {}; 
    int[] value() default {}; 
} 

Man könnte es dann gerne verwenden:

@OneOf({2, 3, 5, 9}) 
+0

den schönen Namen kopiert 'OneOf' aus @Gunnar :) – john16384

2

Sie könnten eine benutzerdefinierte Bean-Validierungseinschränkung implementieren, wie ausführlich im Hibernate-Validator reference guide beschrieben. Statt eines ENUM würde ich vorschlagen, eine Reihe der akzeptierten numerischen Werte zu verwenden:

@OneOf({ 10, 20, 50 }) 
int myInt; 
Verwandte Themen