使用JSR-303进行校验
额外的jar包:hibernate-validator-5.1.3.Final-dist.zip中dist/hibernate-validator-5.1.3.Final.jar和dist/ lib/*.jar
需要校验的Bean:
public class Client {
@NotEmpty(message = "not null")//也可以注解在getXXX方法上,一样可以校验
private String name;
@NotEmpty(message = "not null")
@Size(min = 3, max = 10, message = "密码的长度必须大于3小于10")
private String password;
@Pattern(regexp = "(\\w+\\.*)\\w+@\\w+\\.[a-zA-z]{2,6}", message = "邮箱的格式不正确!")
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
MyController.java
@Controller
@RequestMapping(value = "/hello")
public class MyController {
// GET时不用校验
@RequestMapping(value = "/h1", method = RequestMethod.GET)
public String print1(Client client) {
return "welcome";
}
// POST时需要校验
@RequestMapping(value = "/h1", method = RequestMethod.POST)
public String print3(@Valid Client client, BindingResult result) {
System.out.println(client.getName());
System.out.println(client.getPassword());
System.out.println(client.getEmail());
return "welcome";
}
}
这里一个@Valid的参数后必须紧挨着一个BindingResult 参数,否则spring会在校验不通过时直接抛出异常
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'welcome.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<sf:form method="post" modelAttribute="client"><!-- 用client接收 -->
姓名:<input type="text" name="name" />
<sf:errors path="name" />
<br /> Password:<input type="password" name="password" />
<sf:errors path="password" />
<br /> Email:<input type="text" name="email" />
<sf:errors path="email" />
<br /> <input type="submit" />
</sf:form>
</body>
</html>
<mvc:annotation-driven /> 会自动开启spring的Valid功能,所以不需要额外配置
JSR303定义的校验类型
空检查
@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 对象是否符合正则表达式的规则
数值检查,建议使用在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=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage") private BigDecimal wage;
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@URL(protocol=,host=, port=,regexp=, flags=)