Я работаю над приложением spring mvc, где я должен использовать проверку достоверности на основе валидатора spring MVC. Я первый шаг для этого, я добавил аннотацию для контроллера класса и установки, и он отлично работает. И теперь мне нужно реализовать специальный валидатор для выполнения сложной логики, но я хочу использовать существующую аннотацию и просто добавить дополнительную проверку.
Мой класс пользователя:
public class User
{
@NotEmpty
private String name;
@NotEmpty
private String login; // should be unique
}
Мой валидатор:
@Component
public class UserValidator implements Validator
{
@Autowired
private UserDAO userDAO;
@Override
public boolean supports(Class<?> clazz)
{
return User.class.equals(clazz) || UsersForm.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors)
{
/*
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "NotEmpty.user");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "login", "NotEmpty.user");
*/
User user = (User) target;
if (userDAO.getUserByLogin(user.getLogin()) != null) {
errors.rejectValue("login", "NonUniq.user");
}
}
}
Мой контроллер:
@Controller
public class UserController
{
@Autowired
private UserValidator validator;
@InitBinder
protected void initBinder(final WebDataBinder binder)
{
binder.setValidator(validator);
}
@RequestMapping(value = "/save")
public ModelAndView save(@Valid @ModelAttribute("user") final User user,
BindingResult result) throws Exception
{
if (result.hasErrors())
{
// handle error
} else
{
//save user
}
}
}
Итак, возможно ли совместное использование валидатора и аннотации? И если да, то как?