Проверка пружины - программно связывается с валидатором - PullRequest
5 голосов
/ 27 августа 2011

Я пытаюсь использовать проверку Spring для проверки моей модели, заполненной конвертером Джексона.Итак, у меня есть класс Java,

class MyClass(){
    private String myString;
}

Этот класс заполнен Джексоном, и у меня есть экземпляр в моем коде 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
    }
}

Теперь я хотел отправить объект в валидатор и получить объект ошибок, изучить и продолжить работу.Но для вызова

validate(Object object,Errors errors) 

мне нужен экземпляр ошибки, которого у меня нет.Я не могу использовать BindingResult или Errors.Посоветуйте, пожалуйста, как действовать дальше.

1 Ответ

11 голосов
/ 31 августа 2011

Вы можете сделать это вручную в коде с помощью DataBinder:

MyClass toValidate = new MyClass();
DataBinder binder = new DataBinder(toValidate);
binder.setValidator(new MyValidator());
binder.validate();
if (binder.getBindingResult().hasErrors()) {
    // oh noes!
}

Хотя, если у вас есть @ModelAttribute, определенный в @Controller в spring-mvc, что-то вроде этого должно работать (помещается внутри соответствующего @Controller):

@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!
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...