Java Spring验证-以编程方式绑定到验证器
我试图使用Spring验证来验证由Jackson converter填充的模型。 所以我有一个java类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
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!
}
}