我正在通過實現Validator接口來實現一些Spring Framework驗證。我想支持我的DTO的對象,一個長(主鍵驗證),以及收集,這樣我就不需要在調用驗證過無數次呼籲在我的控制器方法Instanceof Collection不能像預期的那樣運行
/*
* (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;
}
在我的控制器當我調用Validation時,我傳遞一個ArrayList,但接收到IllegalArgumentException(Validator類不支持ArrayList)。這應該工作正確嗎?因爲ArrayList是一個集合因此(ArrayList instanceof集合)應該返回true。
如果這個邏輯不正確,請讓我知道。這真的讓我感到壓力。另外,請不要在模型中提及簡單的javax驗證。
// ---- Bean Class
@NotNull
private String attribute;
// ...
的原因是因爲我在做這個之前,但因爲標準我應該使用需要這個框架去改變它需要的。
如果你的錯誤信息是'驗證類不支持使用
Class.isAssignable
的正確方法...' ,這可能是因爲'support()'方法。該方法使用'equals'來檢查類,而不是'instanceof'。所以它永遠不會使用'instanceof'的語句。嘗試[Class.isInstance](http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#isInstance-java.lang.Object-)。 – ajb