利用@Valid实现一些简单的注解功能:
首先需要构造一个实体类:
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
public class User {
private String username;
private String password;
private int age;
private String address;
public User() {
}
public User(String username, String password, int age, String address) {
super();
this.username = username;
this.password = password;
this.age = age;
this.address = address;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age=" + age + ", address=" + address + "]";
}
}
上面是最简单的Bean形式的类。
常用注解:
- @NotNull 验证属性是否为null
- @NOtEmpty 验证注解元素值不为null且不为空
- @NotBlank 验证注解的元素值不为空(不为null,去除首位和末尾空格后长度为0)
- @Size(min=,max=) 设置字符串长度
- @DecimalMin("") 最小值
- @DecimalMax("") 最大值
- @Email 邮箱格式
修改后用实体类:
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
public class User {
@NotBlank
@Size(min=5,max=20)
private String username;
@NotEmpty
@Size(min=6,max=30)
private String password;
@DecimalMax(value="100")
@DecimalMin("0")
private int age;
@Email
@NotEmpty
private String address;
public User() {
}
public User(String username, String password, int age, String address) {
super();
this.username = username;
this.password = password;
this.age = age;
this.address = address;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age=" + age + ", address=" + address + "]";
}
}
下面利用@Valid注解进行处理:
//Get方式处理
@RequestMapping(value="/register",method=RequestMethod.GET)
public String showUser(@ModelAttribute("user")User user,ModelMap map) {
System.out.println("ShowUser....");
map.addAttribute("user", new User());
return "register";
}
//Post方式处理
@RequestMapping(value="/register",method=RequestMethod.POST)
public String processUser(@Valid User user,BindingResult errors,RedirectAttributes ra) {
System.out.println("processUser...");
if(errors.hasErrors()) {
System.out.println("Have errors");
ra.addFlashAttribute("user", user);
ra.addFlashAttribute("org.springframework.validation.BindingResult.exField", errors);
java.util.List<ObjectError> es=errors.getAllErrors();
for(ObjectError t:es) {
//System.out.println(t);
System.out.println(t.getCodes()[1]+" "+t.getDefaultMessage());
}
//System.out.println(errors.getFieldError().getDefaultMessage());
return "register";
}
return "success";
}