2017-05-30 68 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()); 
}