Spring自定义验证注释+ Validator实现

时间:2014-05-20 19:05:27

标签: spring bean-validation spring-annotations

我有一个简单的POJO,如果填充了2个属性(ssn / clientId)中的一个,则认为它是有效的。我编写了一个自定义的Spring Validator来进行验证。

我的问题是,有没有办法可以注释我的POJO,以便自动调用我的自定义Validator进行验证?我试图避免从多个地方手动调用它。

public class QueryCriteria {
    @NotNull
    private QueryBy queryBy;
    private String ssn;
    private String clientId;
}

public class QueryCriteriaValidator implements org.springframework.validation.Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return QueryCriteria.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        QueryCriteria criteria = (QueryCriteria) target;

        switch (criteria.getQueryBy()){
            case CLIENT:
                //validation logic
                break;

            case SSN:
                //validation logic
                break;

            default:
                break;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

使用Spring MVC,只需将自定义验证器添加到控制器的数据绑定器中:

@Autowired
private QueryCriteriaValidator validator;

@InitBinder
public void initializeBinder(WebDataBinder binder) {
    binder.addValidators(validator);
}

否则,您将要注入自定义验证器并自行调用。

@Autowired
private QueryCriteriaValidator validator;

public void process(QueryCriteria criteria) {
    check(validator.validate(criteria));
    // Continue processing.
}

答案 1 :(得分:0)

Só您可以创建自己的验证。示例:

@RequiredParam
@RegexpValidation("^[\\p{IsLatin}]{2}[\\p{IsLatin}-]* [\\p{IsLatin}]{2}[\\p{IsLatin}- ]*$")
private String name;

创建类验证器e发送要验证的表单:

Map<String, String> invalidFieldMap = Validator.validate(form);

    if (invalidFieldMap.size() > 0)
    { 
    LOGGER.warn("Invalid parameters");
    }

看看这个要点Validator.java https://gist.github.com/cmsandiga/cb7ab4d537ef4d4691f7