简体   繁体   English

Spring MVC Bean验证

[英]Spring MVC Bean Validation

I have to implement validations for a web app that uses Spring MVC 3. The problem is that the bean class has methods like getProperty("name") and setProperty("name",valueObj). 我必须对使用Spring MVC 3的Web应用程序实施验证。问题是Bean类具有诸如getProperty(“ name”)和setProperty(“ name”,valueObj)之类的方法。 The validations have to be done on the data that is returned by passing different values to getProperty("name") , for eg: getProperty("age") should be greater than 16 and getProperty("state") should be required. 验证必须对通过将不同的值传递给getProperty(“ name”)返回的数据进行,例如:getProperty(“ age”)应该大于16,并且需要getProperty(“ state”)。

I would like to know if there is any support for validation this kind of Bean and if not, what can be the work around. 我想知道是否有验证这种Bean的支持,如果没有,可以解决什么问题。

Thanks, Atif 谢谢,阿蒂夫

I don't think so. 我不这么认为。 Bean validation is performed on javabeans, ie class fields with getters and setters. Bean验证是在javabeans上执行的,即具有getter和setter的类字段。 Even if you can register a custom validator, and make validation work, binding won't work. 即使您可以注册自定义验证程序并使验证生效,绑定也将不起作用。 You would need to also register a custom binder that populates your object. 您还需要注册一个用于填充对象的自定义活页夹。 It becomes rather complicated. 它变得相当复杂。 So stick to the javabeans convention. 因此,请遵循javabeans约定。

It sounds like you want to a custom validation class which implements org.springframework.validation.Validator . 听起来您想要一个实现org.springframework.validation.Validator的自定义验证类。

@Component
public class MyValidator implements Validator {

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

    @Override
    public void validate(Object target, Errors errors) {
        MyBean myBean = (MyBean) target;

        if (StringUtils.isBlank(myBean.getProperty("state"))) {
            errors.rejectValue("state", "blank");
        }
    }

}

In your controller you would do manual validaton like follows: 在您的控制器中,您将执行手动验证,如下所示:

@Autowired
private MyValidator myValidator;

@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(@ModelAttribute("myBean") MyBean myBean, BindingResult result) {

    myValidator.validate(myBean, result);
    if (result.hasErrors()) {
        ...
    }

    ...

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM