您的位置:首页 > 编程语言 > Java开发

JAVA Spring web mvc 学习 之 6:数据验证

2017-09-23 21:24 519 查看
这里写了两种方式:

1.采用Spring验证类进行验证

   a.定义实现 spring Validator接口的类

   b.调用validate方法进行验证即刻。验证是,验证存在结果Error 中

----------------------------------------------

2.使用JSR303进行验证

  a.主要使用hibernate中的验证

  b.在实体模型类中,使用注解方式进行。

  c.在控制器中,使用@Valid注解标示需要进行验证的实体

------------------------------------------------------------------------------

1.Spring 的Validator

a.实现Validator接口

// 实现Spring的Validator接口

@Repository("userValidator")

public class UserValidator implements Validator {

// 该校验器能够对clazz类型的对象进行校验。
@Override
public boolean supports(Class<?> clazz) {
// User指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。
return User.class.isAssignableFrom(clazz);
}

// 对目标类target进行校验,并将校验错误记录在errors当中
@Override
public void validate(Object target, Errors errors) {
/**
使用ValidationUtils中的一个静态方法rejectIfEmpty()来对loginname属性进行校验,
假若'loginname'属性是 null 或者空字符串的话,就拒绝验证通过 。
*/
ValidationUtils.rejectIfEmpty(errors, "loginname", null, "登录名不能为空");  
ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");  
User user = (User)target;
if(user.getLoginname().length() > 10){
// 使用Errors的rejectValue方法验证
errors.rejectValue("loginname", null, "用户名不能超过10个字符");
}
if(user.getPassword() != null 
&& !user.getPassword().equals("") 
&& user.getPassword().length() < 6){
errors.rejectValue("password", null, "密码不能小于6位");
}
}

}

b.控制器中调用验证

  @RequestMapping(value="/login",method=RequestMethod.POST)
public String login(
@ModelAttribute User user,
Model model,
Errors errors) {
logger.info(user);
model.addAttribute("user", user);
// 调用userValidator的验证方法
userValidator.validate(user, errors);
// 如果验证不通过跳转到loginForm视图
if(errors.hasErrors()){
return "loginForm";
}
    return "success";
}

特别说明:jsp中可以使用<form:input path="字段"><form:errors path="字段">接受错误,关于form标签,可以在JSP页面增加<%@taglib prefix= "form" uri= "http://www.springframework.org/tags/form" %>

2.JSR303校验

特别说明:验证使用包如下

import javax.validation.constraints.Past;

import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Email;

import org.hibernate.validator.constraints.Length;

import org.hibernate.validator.constraints.NotBlank;

import org.hibernate.validator.constraints.Range;

import org.springframework.format.annotation.DateTimeFormat;

a.在使用中进行验证注释

public class User implements Serializable{

@NotBlank
private String loginname;

@NotBlank
@Length(min=6,max=8)
private String password;

@NotBlank
private String username;

@Range(min=15, max=60)
private int age;

@Email(message="必须输入合法邮箱地址")
private String email;

@DateTimeFormat(pattern="yyyy-MM-dd")
@Past
private Date birthday;

@Pattern(regexp="[1][3,8][3,6,9][0-9]{8}")
private String phone;
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User [loginname=" + loginname + ", password=" + password
+ ", email=" + email + ", username="
+ username + ", birthDate=" + birthday + ", phone=" + phone
+ "]";
}

}

b.在控制器中加入验证注释

// 数据校验使用@Valid,后面跟着Errors对象保存校验信息
@RequestMapping(value="/login",method=RequestMethod.POST)
public String login(
@Valid @ModelAttribute  User user,
Errors  errors,
M
afa3
odel model) {
logger.info(user);
if(errors.hasErrors()){
return "registerForm";
}
model.addAttribute("user", user);
    return "success";
}
 

关于JSR303校验

@Null,@NotNull ,@AssertTrue ,@AssertFalse , @Max(value), @Min(value) ,

@DecimalMax(value) ,@DecimalMin(value) ,@Digits(integer,fraction) //指定格式的数字,整数精度、小数精度

@Size(min,max) // 验证对象长度(Array、Collection\Map\String)

@Past //当前时间前 @Future //当前时间后 @Pattern //验证正则表达式

JSR303 在 Hibernate 中扩展

@NotBlank @URL @Email @CreditCardNumber //信用卡号码 @Length(min,max) @NotEmpty @Range(min,max,message)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 数据验证