Проверка данных формы с помощью аннотаций (@Size, @Email и др) в Spring MVC

июня
21
2012

Содержание

Эта статья является продолжением статьи о формах в Spring и о проверке введенных пользователем данных. Будут рассмотрены аннотации, заменяющие валидатор.

Чтобы указать параметры проверки имя пользователя будем использовать следующие аннотации:


@NotBlank
@Size(min=3, max=16)
private String username;

Аннотация @Email используется для проверки правильности введенного email'а:


@Email
private String email;

Увы, нет стандартной аннотации, которая проверяет совпадение значений двух полей (в нашем случае - password и confirmPassword). Такую аннотацию мы создадим в следующей статье.

То есть, окончательный вариант класса SignupForm будет выглядеть следующим образом:


package com.seostella.springfa.form;

import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;

public class SignupForm {
	@NotBlank
	@Size(min=3, max=16)
	private String username;
	
	@NotBlank
	private String password;
	
	@NotBlank
	private String confirmPassword;
	
	@Email
	private String email;
	
	public String getUsername() {
		return username;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String getConfirmPassword() {
		return confirmPassword;
	}
	
	public void setConfirmPassword(String confirmPassword) {
		this.confirmPassword = confirmPassword;
	}
	
	public String getEmail() {
		return email;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
}

В классе SignupValidator уже нет никакой необходимости, поэтому он исключен из проекта.

Необходимо внести еще одну правку в контроллер SignupController. Так как мы используем аннотации, которые будут проверять значение полей класса, необходимо описать аннотацией @Valid параметр метода SignupForm. Ниже приведен полный листинг класса SignupController:


package com.seostella.springfa.controller;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.seostella.springfa.form.SignupForm;

@Controller
@RequestMapping("/signup")
public class SignupController {

	@RequestMapping(method = RequestMethod.GET)
	public String signup(ModelMap model) {
		SignupForm signupForm = new SignupForm();
		model.put("signupForm", signupForm);
		return "signup";
	}

	@RequestMapping(method = RequestMethod.POST)
	public String processSignup(@Valid final SignupForm signupForm, final BindingResult result) {
		if (result.hasErrors()) {
			return "signup";
		}
		return "signup-success";
	}
}

Остальные файлы проекта остаются без изменений.

В классе SignupForm использовались аннотации из двух пакетов: javax.validation.constraints и org.hibernate.validator.constraints. Рассмотрим остальные аннотации из этих пакетов.

Пакет javax.validation.constraints:

Пакет org.hibernate.validator.constraints:

Код проекта Вы можете скачать по следующей ссылке - Скачать spring-fa.zip.

< Формы и валидация форм в Spring Аннотация для проверки равенства двух полей формы в Spring MVC >

Комментарии (5)

arazei
31 октября 2012 г. 17:59
Почему у меня не работает это условие
if (result.hasErrors()) {
return "signup";
}
у меня всегда result.hasErrors() равен нулю, даже если я нарошно делаю ошибку?
arazei
16 ноября 2012 г. 13:22
Разобрался
pyadmitriy
11 января 2013 г. 0:41
А как проверить поле
private Date year;
pyadmitriy
11 января 2013 г. 0:48
Нужно задать первый вопрос!
Есть поле на форме для ввода даты 15.01.2012. Ка с ним правильно работать?
При регистрации его нужно записать в БД, пр чтение извлечь!
pyadmitriy
11 января 2013 г. 2:30
Как провалидировать
@RequestMapping(value = "/useradd", method = RequestMethod.POST)
public String addUserSubmit(@Valid final User user, HttpServletRequest request, final BindingResult result,
Model model)
{
Role role = roleService.readRole(Integer.parseInt(request.getParameter("roleId")));
if(role.getName().equals("student"))
{
Group group = groupService.readGroup(Integer.parseInt(request.getParameter("groupId")));
user.setGroup(group);
}
user.getRoles().add(role);
if(result.hasErrors())
return "useradd";
userService.addUser(user);
foldersService.createFolders(user);
model.addAttribute("addeduser", user);
return "redirect:/useradd";
}
Вы должны войти под своим аккаунтом чтобы оставлять комментарии