Я пытаюсь удалить повторяющийся код из моих Spring Controllers, в частности - устранение необходимости выполнять validator.validate (form, bindingResult) из начала многих моих функций.
У меня естьнесколько классов, которые имеют соответствующие классы валидатора, которые реализуют интерфейс валидатора Spring.Я искал вокруг, чтобы попытаться найти ответ, но у меня возникли проблемы с поиском ответа, который действительно соответствует этому.
Фрагмент класса формы лица с аннотированными атрибутами
public class Person {
@Size(min=1, message="Name missing")
private String name;
@Size(min=1, message="Age missing")
private String age;
.... getters and setters etc.
Person Validator Class
@Component
public class PersonValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Person.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
errors.reject("No sir!");
}
}
В идеале, я хотел бы иметь возможность иметь все ошибки, содержащиеся в BindingResult, включая ошибки из класса валидатора.Поэтому, когда я использую аннотацию @Validated, мой BindingResult полностью заполняется всеми ошибками как простых аннотаций, так и пользовательского валидатора.
Желаемый результат
@RequestMapping(value="/save", method=RequestMethod.POST)
public @ResponseBody String save(@Validated @RequestBody Person personForm, BindingResult bindingResult, HttpServletRequest request)
{
bindingResult.getAllErrors(); <-- fully pop with annotation and custom validator errors
Вместо:
@RequestMapping(value="/save", method=RequestMethod.POST)
public @ResponseBody String save(@Validated @RequestBody Person personForm, BindingResult bindingResult, HttpServletRequest request)
{
personValidator.validate(person, bindingResult) <-- Populate bindingResult with customer validator errors, if any
bindingResult.getAllErrors();
У кого-нибудь есть какие-нибудь интересные примеры, которыми они могут поделиться, чтобы обойти это?
Спасибо!