Ich implementiere eine Spring Framework-Validierung durch Implementierung der Validator-Schnittstelle. Ich möchte Unterstützung meine DTO-Objekt, eine Long (für Primärschlüssel Validierung) und eine Sammlung, so dass ich nicht brauchenInstanz der Sammlung funktioniert nicht wie erwartet
/*
* (non-Javadoc)
* @see org.springframework.validation.Validator#supports(java.lang.Class)
*/
@Override
public boolean supports(Class<?> clazz) {
Class<?>[] supportedClasses = {
UserDTO.class,
Collection.class,
Long.class
};
for(Class<?> c : supportedClasses){
if(clazz.equals(c)){
return true;
}
}
return false;
}
/*
* (non-Javadoc)
* @see org.springframework.validation.Validator#validate(java.lang.Object, org.springframework.validation.Errors)
*/
@Override
public void validate(Object target, Errors errors) {
if(target instanceof Collection<?>){
Iterator<?> i = ((Collection<?>) target).iterator();
while(i.hasNext()){
validate(i.next(), errors);
}
return;
}
In meinem Controller die Invoke Validation zahlreiche Male in meinem Controller Methoden aufrufen Wenn ich die Validierung aktiviere, übergebe ich eine ArrayList, erhalte aber eine IllegalArgumentException (Validator-Klasse unterstützt keine ArrayList). Diese sollte funktionieren? Da ArrayList eine Collection ist (ArrayList instanceof Collection) sollte true zurückgegeben werden.
Wenn diese Logik nicht korrekt ist, lass es mich wissen. Das belastet mich wirklich. Bitte erwähnen Sie auch nicht die einfache Java-Validierung in den Modellen, z.
// ---- Bean Class
@NotNull
private String attribute;
// ...
Der Grund ist, weil ich das vorher tat, aber erforderlich, um es zu ändern, weil die Standards ich diesen Rahmen verwenden sollten erfordert.
zurückkehren Wenn Sie Ihre Fehlermeldung 'Validator-Klasse ist nicht unterstützt ...' Wahrscheinlich liegt es an der 'support()' Methode. Und diese Methode verwendet 'equals', um die Klassen zu prüfen, nicht 'instanceof'. Es kommt also nie zu der Anweisung, die 'instanceof' verwendet. Versuchen Sie [Class.isInstance] (http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#isInstance-java.lang.Object-). – ajb