У меня есть одна форма, для которой есть три Pojo, потому что есть три отдельных таблицы, по одной для каждого Pojo. Два поля в форме предварительно заполнены. Теперь я хочу проверить форму с помощью весеннего валидатора. Я пытался использовать абстрактный класс с общими полями всех трех Pojo в нем, и каждый Pojo расширял его, но Spring не смог создать объект для абстрактного класса и выдал исключение. Я предпочитаю не использовать интерфейс, так как мне нужно инициализировать все поля.
Ниже приведен код ссылки.
Контроллер
@RequestMapping(value="/save",method=RequestMethod.POST)
public String saveData(@ModelAttribute("commonForm")@Valid Foo foo,FooBar fooBar,Test test,BindingResult result){
this.testValidator.validate(foo, result); //which Pojo to provide here
if(result.hasErrors()){
return "redirect:/regPage";
}else{
return "success";
}
}
Валидатор
public class TestValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Foo.class.equals(clazz)|| FooBar.class.equals(clazz)|| Test.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
if(target instanceof Foo){
//validate Foo...
}else if(target instanceof FooBar){
//validate FooBar...
}else{
//validate Test...
}
}
}
Кроме того, последний Pojo, то есть test, похоже, перекрывает два других с сообщением об ошибке.
@Valid
для каждой модели в модели-оболочке. похоже на это:public class WrapperModel { @Valid private Foo foo; @Valid private Bar bar; // ...}
- person Hadi J   schedule 22.09.2018