Spring之数据校验-JSR303

6 篇文章 0 订阅

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

添加依赖包 

<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
	<groupId>org.hibernate.validator</groupId>
	<artifactId>hibernate-validator</artifactId>
	<version>6.0.5.Final</version>
</dependency>

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

项目结构

添加实体类

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 + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>注册页面</title>
</head>
<body>
	<form:form modelAttribute="user" method="post" action="login">
		<span>登陆名:</span>
		<form:input path="loginname" />
		<form:errors path="loginname" cssStyle="color:red" />
		<br />
		<span>密码:</span>
		<form:input path="password" />
		<form:errors path="password" cssStyle="color:red" />
		<br />
		<span>用户名:</span>
		<form:input path="username" />
		<form:errors path="username" cssStyle="color:red" />
		<br />
		<span>年龄:</span>
		<form:input path="age" />
		<form:errors path="age" cssStyle="color:red" />
		<br />
		<span>邮箱:</span>
		<form:input path="email" />
		<form:errors path="email" cssStyle="color:red" />
		<br />
		<span>生日:</span>
		<form:input path="brithDate" />
		<form:errors path="brithDate" cssStyle="color:red" />
		<br />
		<span>电话:</span>
		<form:input path="phone" />
		<form:errors path="phone" cssStyle="color:red" />
		<br />
		<input type="submit" value="提交" />
	</form:form>
</body>
</html>

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 + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>登陆界面</title>
</head>
<body>
	登陆名:${requestScope.user.loginname }
	<br /> 密码:${requestScope.user.password }
	<br /> 登陆名:${requestScope.user.username }
	<br /> 年龄:${requestScope.user.age }
	<br /> 邮箱:${requestScope.user.email }
	<br /> 生日:<fmt:formatDate value="${requestScope.user.brithDate }" pattern="yyyy年MM月dd日"/> 
	<br /> 电话:${requestScope.user.phone }
</body>
</html>

运行效果

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=)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值