Java Spring验证-以编程方式绑定到验证器

Java Spring验证-以编程方式绑定到验证器,java,validation,spring-mvc,jackson,Java,Validation,Spring Mvc,Jackson,我试图使用Spring验证来验证由Jackson converter填充的模型。 所以我有一个java类 class MyClass(){ private String myString; } 这个类由Jackson填充,我的Java代码中有这个实例。 还定义了一个验证器类,如 class MyValidator implements Validator { public boolean supports(Class<?> clazz) { retu

我试图使用Spring验证来验证由Jackson converter填充的模型。 所以我有一个java类

class MyClass(){
    private String myString;
}
这个类由Jackson填充,我的Java代码中有这个实例。 还定义了一个验证器类,如

class MyValidator implements Validator {
    public boolean supports(Class<?> clazz) {
        return MyClass.class.equals(clazz);
    }   
    public void validate(Object object, Errors errors) {
           //Validation logic here
    }
}

我需要一个我没有的错误实例。我不能使用
BindingResult
Errors
。请告知如何进一步操作。

您可以使用DataBinder在代码中手动执行此操作:

MyClass toValidate = new MyClass();
DataBinder binder = new DataBinder(toValidate);
binder.setValidator(new MyValidator());
binder.validate();
if (binder.getBindingResult().hasErrors()) {
    // oh noes!
}
虽然如果您在SpringMVC的@Controller中定义了@ModelAttribute,但类似的方法应该可以工作(放在相关的@Controller中):


最终,我将所有验证放在一个单独的类中,并直接从模型中调用。但所提供的建议应该适用于任何面临同样问题的人
MyClass toValidate = new MyClass();
DataBinder binder = new DataBinder(toValidate);
binder.setValidator(new MyValidator());
binder.validate();
if (binder.getBindingResult().hasErrors()) {
    // oh noes!
}
@ModelAttribute("myclass")
public MyClass myClass() {
    return new MyClass();
}

@InitBinder("myclass")
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(new MyValidator());
}

@RequestMapping(value = "/do/something", method = POST)
public ModelAndView validatedRequest(@Valid @ModelAttribute("myclass") MyClass profile,
                                     BindingResult result) {
    if (result.hasErrors()) {
        // oh noes!
    }
}