如何在春天使用ValidationUtils

时间:2014-08-01 18:41:06

标签: spring spring-mvc

我想按如下方式使用ValidationUtils。但我无法实例化错误对象,因为错误是一个接口。你能告诉我如何在不使用验证器的情况下使其工作吗?

     if(visitorDetails==null)
    {
        Errors errors;
        visitorDetails=new Visitor(); 
        ValidationUtils.rejectIfEmpty(errors, "VisitorInfo", "Selected Visitor Details Not Found");
    }

4 个答案:

答案 0 :(得分:5)

阅读本文:Validation...

但是,您必须在类中实现Validation接口,而不是使用它来验证您的对象,并且在控制器中自动装配验证器。

这是一个例子:

public class PersonValidator implements Validator {

    /**
    * This Validator validates *just* Person instances
    */
    public boolean supports(Class clazz) {
        return Person.class.equals(clazz);
    }

    public void validate(Object obj, Errors e) {
        ValidationUtils.rejectIfEmpty(e, "name", "name.empty");
        Person p = (Person) obj;
        if (p.getAge() < 0) {
            e.rejectValue("age", "negativevalue");
        } else if (p.getAge() > 110) {
            e.rejectValue("age", "too.darn.old");
        }
      }
}

并在您的控制器中:

....

    @Autowired
    private PersonValidator personValidator;

    @InitBinder
    protected void initBinder(final HttpServletRequest request, final ServletRequestDataBinder binder) {
        binder.addValidators(personValidator);
    }
...

答案 1 :(得分:0)

当字段为空或者为emptywithspace时,你可以用它来对你的某些字段做一些约束,比如显示错误,这个类已经包含了一些可以做到这一点的静态方法 下面是一个使用ValidationUtils类的例子 公共类UserValidator实现Validator {

public boolean supports(Class clazz) {
    // TODO Auto-generated method stub
    return Employee.class.equals(clazz);
}

public void validate(Object target, Errors errors) {
    // TODO Auto-generated method stub

    ValidationUtils.rejectIfEmpty(errors, "email", "email");
    ValidationUtils.rejectIfEmpty(errors, "password", "password");

    Employee emplo = (Employee) target;

      if(emplo.getEmail() != null && emplo.getEmail()=="aa") {
          errors.rejectValue("email", "email invalide ");

}

答案 2 :(得分:0)

  

假设您正在使用Spring Boot。

如果使用application.properties(在project / src / resources下),请在其中添加以下内容:

spring.messages.basename=validation

现在将validation.properties(位于project / src / resources下)并放入以下内容(例如):

NotEmpty=This field is required.

您的模型(在本例中为AppUser)应具有:

private String useremail;
getters/setters;

创建一个这样的组件(类)(示例):

@Component
public class UserAddValidator implements Validator {

@Autowired
private UserService userService;

@Override
public boolean supports(Class<?> aClass) {
    return AppUser.class.equals(aClass);
}

@Override
public void validate(Object o, Errors errors) {
    AppUser user = (AppUser) o;

    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "useremail", "NotEmpty");

}

}

以下内容进入您的控制器:

@RequestMapping(value = "registration", method = RequestMethod.POST)
public String registration(@ModelAttribute("userForm") AppUser userForm, BindingResult bindingResult, Model model) {
    useraddValidator.validate(userForm, bindingResult);

    if (bindingResult.hasErrors()) {
        return "userregistration";
    }

    userService.save(userForm);

    model.addAttribute("success", "User " + userForm.getUsername() + " created successfully");
    return "success";

}

最后但并非最不重要的一点,您认为与此类似:

       <div class="row">
            <label class="col-md-3" for="useremail">Email-ID</label>
            <div class="col-md-8">
                <spring:bind path="useremail">
                    <div class="form-group ${status.error ? 'has-error' : ''}">
                        <form:input type="text" path="useremail" class="form-control"
                            placeholder="Email-id" autofocus="true"></form:input>
                        <form:errors path="useremail">${emailerror}</form:errors>

                    </div>
                </spring:bind>
            </div>
        </div>

结果应如下所示:

enter image description here

您可以查看HERE进行更多验证。

答案 3 :(得分:0)

如果我正确理解了您的问题,则希望获取错误对象。 对于您的情况,我建议采用以下方法。

if(visitorDetails==null)
{
    visitorDetails=new Visitor(); 
    Errors errors = new BeanPropertyBindingResult(visitorDetails, visitorDetails.getClass().getName());
    ValidationUtils.rejectIfEmpty(errors, "VisitorInfo", "Selected Visitor Details Not Found");
}

让我知道是否需要更多帮助。