2017-05-30 73 views
0

我使用Spring引導1.5.3.RELEASE。我試圖通過org.springframework.validation.Validator驗證Spring Boot REST API。 春天驗證有幾種方法來驗證實體,所以,當我打電話的REST API春天驗證只能部分

ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "field.required"); 

一切正常,並請求失敗,驗證錯誤,但進一步的,當我執行不同的驗證

if (!StringUtils.isAllLowerCase(request.getId())) { 
    errors.rejectValue("id", "Id should be lowercase"); 
} 

什麼也沒有發生,雖然代碼實際執行並且rejectValue方法實際上被調用,但是由於某些原因處理請求沒有停止。

所以,問題是爲什麼驗證不會發生,也許有不同的方式通過Spring /彈簧引導執行驗證。我有很多複雜的驗證,所以我儘量避免使用JSR-303並創建大量的自定義註釋。

RequestValidator

import com.user.model.TenantRequest; 
import org.apache.commons.lang3.StringUtils; 
import org.springframework.stereotype.Component; 
import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 

@Component 
public class TenantRequestValidator implements Validator { 

@Override 
public boolean supports(Class<?> clazz) { 
    return TenantRequest.class.isAssignableFrom(clazz); 
} 

@Override 
public void validate(Object target, Errors errors) { 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "field.required"); 

    TenantRequest request = (TenantRequest) target; 

    if (!StringUtils.isAllLowerCase(request.getId())) { 
     errors.rejectValue("id", "Id should be lowercase"); 
    } 


} 
} 
+0

顯示控制器。 –

回答

1

提供有關TenantRequest.java

細節

可能對現在你可以嘗試刪除@Component,因爲不需要它,因爲你正在實施驗證。

請參閱我的工作示例創建https://github.com/Roshanmutha/rcmutha-SpringFormUIValidation/blob/master/src/main/java/com/rcmutha/SpringInputValidation/EmployeeFormValidator.java

而且你在下面控制器添加?

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(new EmployeeFormValidator()); 
}