0

我必须为使用 Spring MVC 3 的 Web 应用程序实现验证。问题是 bean 类具有 getProperty("name") 和 setProperty("name",valueObj) 之类的方法。必须对通过将不同值传递给 getProperty("name") 返回的数据进行验证,例如: getProperty("age") 应该大于 16 并且 getProperty("state") 应该是必需的。

我想知道是否支持验证这种 Bean,如果没有,可以解决什么问题。

谢谢, 阿提夫

4

2 回答 2

4

我不这么认为。Bean 验证在 ja​​vabean 上执行,即具有 getter 和 setter 的类字段。即使您可以注册自定义验证器并进行验证,绑定也不起作用。您还需要注册一个填充您的对象的自定义活页夹。它变得相当复杂。所以坚持javabeans约定。

于 2012-04-23T21:48:07.740 回答
2

听起来您想要一个实现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");
        }
    }

}

在您的控制器中,您将执行如下手动验证:

@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()) {
        ...
    }

    ...

}
于 2012-04-23T21:51:01.407 回答