Spring之数据校验-JSR303

在Myeclipse+Maven新建SpringMVC项目基础上继续编写代码

添加依赖包 



	org.hibernate.validator
	hibernate-validator
	6.0.5.Final

这里有点小坑,再Maven仓库里查找该包的时候。我是直接找最新版本的,结果有点问题。再为实体添加验证规则的时候,找不到注解@Length@Range,反正再包import org.hibernate.validator.constraints下面的注解都找不到,估计是新版本后改进了些什么东西。后面把版本改到6.0.5就可以了。

Spring之数据校验-JSR303_第1张图片

Spring之数据校验-JSR303_第2张图片

项目结构

Spring之数据校验-JSR303_第3张图片

添加实体类

package com.alin.JSR303;
import java.io.Serializable;
import java.util.Date;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import org.springframework.format.annotation.DateTimeFormat;

public class User implements Serializable{
	private static final long serialVersionUID = -2207178391281646317L;
	
	@NotBlank(message="登录名不能为空")
	private String loginname;
	
	@Length(min=6,max=8,message="密码长度必须再6位到8位之间")
	@NotBlank(message="密码不能为空")
	private String password;
	
	@NotBlank(message="用户名不能为空")
	private String username;
	
	@Range(min=15,max=60,message="年龄必须再15岁到60岁之间")
	private int age;
	
	@Email(message="必须是合法的邮箱地址")
	private String email;
	
	@DateTimeFormat(pattern="yyyy-MM-dd")
	@Past(message="生日 必须是一个过去日期")
	private Date brithDate;
	
	@Pattern(regexp="[1][3,8][3,6,9][0-9]{8}",message="无效的电话号码")
	private String phone;

	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 String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	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 Date getBrithDate() {
		return brithDate;
	}

	public void setBrithDate(Date brithDate) {
		this.brithDate = brithDate;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public String toString() {
		return "User [loginname=" + loginname + ", password=" + password + ", username=" + username + ", age=" + age
				+ ", email=" + email + ", brithDate=" + brithDate + ", phone=" + phone + "]";
	}
	
}

其中的验证规则在上面也能看得清楚。

编写控制器

package com.alin.JSR303;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class JSP303UserController {
	
	@RequestMapping(method=RequestMethod.GET,value="register")
	public String registerForm(Model model){
    	User user=new User();
    	model.addAttribute("user",user);
    	return "JSP303/registerForm";
	}
	
	@RequestMapping(method=RequestMethod.POST,value="/login")
	public String login(@Valid @ModelAttribute User user,Errors errors,Model model){
		System.out.println(user);
		if (errors.hasErrors()) {
			return "JSP303/registerForm";
		}
		model.addAttribute("user",user);
		return "JSP303/success";
	}
}

registerForm.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>





注册页面


	
		登陆名:
		
		
		
密码:
用户名:
年龄:
邮箱:
生日:
电话:

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page  isELIgnored = "false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>




登陆界面


	登陆名:${requestScope.user.loginname }
	
密码:${requestScope.user.password }
登陆名:${requestScope.user.username }
年龄:${requestScope.user.age }
邮箱:${requestScope.user.email }
生日:
电话:${requestScope.user.phone }

运行效果

Spring之数据校验-JSR303_第4张图片

Spring之数据校验-JSR303_第5张图片

Spring之数据校验-JSR303_第6张图片

JSR 303 基本的校验规则

空检查 
@Null 验证对象是否为null 
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串 
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格. 
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.

Booelan检查 
@AssertTrue 验证 Boolean 对象是否为 true 
@AssertFalse 验证 Boolean 对象是否为 false

长度检查 
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内 
@Length(min=, max=) Validates that the annotated string is between min and max included.

日期检查 
@Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期 
@Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期 
@Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。

数值检查 
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null 
@Min 验证 Number 和 String 对象是否大等于指定的值 
@Max 验证 Number 和 String 对象是否小等于指定的值 
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 
@Digits 验证 Number 和 String 的构成是否合法 
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 
@Range(min=, max=) 被指定的元素必须在合适的范围内 
@Range(min=10000,max=50000,message=”range.bean.wage”) 
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) 
@CreditCardNumber信用卡验证 
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 
@ScriptAssert(lang= ,script=, alias=) 
@URL(protocol=,host=, port=,regexp=, flags=)

 

你可能感兴趣的:(Java,Spring)