SpringMVC之数据校验

第一步:导入校验的jar包

在这里插入图片描述

第二步:在springmvc.xml中配置

在这里插入图片描述

第三步:在前端加校验

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册界面</title>
<script type="text/javascript" src="jquery-3.3.1.js"></script>
<script type="text/javascript">

</script>
</head>
<body>
	<center>
		<form action="<%=basePath %>/register2.shtml" method="post">
			<table>
				<tr>
					<td>昵称</td><!-- pattern="[\u4e00-\u9fa5]{4,10}" -->
					<td><input type="text" name="nick"  required="required" placeholder="请输入4-10位汉字"><span style="color:red;">${requestScope.errorMessage.nick }</span></td>
				</tr>
				<tr>
					<td>密码</td><!-- pattern="\w{3,6}" -->
					<td><input type="password" name="password"  required="required" placeholder="请输入3-6位数字、字母、下划线组合"><span style="color:red;">${requestScope.errorMessage.password }</span></td>
				</tr>
				<tr>
					<td>手机号码</td>
					<td><input type="text" name="phone" pattern="1[3578]\d{9}" required="required" placeholder="请输入正确的手机格式"></td>
				</tr>
				<tr>
					<td>邮箱</td>
					<td><input type="email" name="email" required="required" placeholder="请输入正确的邮箱格式"></td>
				</tr>
				<tr>
					<td>年龄</td>
					<td><input type="number" name="age" max="150" min="1" required="required" placeholder="请输入您的年龄"><span style="color:red;">${requestScope.errorMessage.age }</span></td>
				</tr>
				<tr>
					<td colspan="2"><input type="submit" value="注册">
					<input type="reset" value="重置"></td>
				</tr>
			</table>
		</form>
	</center>
	
</body>
</html>

第四步:在后端加校验

在后端加校验是因为当你用浏览器的检查元素更改表单属性时前端校验就会失效,所有前端可以拦住所有不会软件的人,但是拦不住会软件的。

package cn.java.controller.front;

import java.util.Map;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.java.entity.QQ;
import cn.java.utils.Validator;

/**
 * @Description: TODO
 * @Title: ValidateQQController.java
 * @author: Matthew
 * @date: 2019年3月18日 下午7:16:41
 * @version V1.0
 */
@Controller
public class ValidateQQController {

	@RequestMapping("register")
	public void register(QQ qqInfo) {
		String nick = qqInfo.getNick();
		boolean flag1 = nick.matches("[\\u4e00-\\u9fa5]{4,10}");
		
		
		String password = qqInfo.getPassword();
		boolean flag2 = password.matches("\\w{3,6}");
		
		String phone = qqInfo.getPhone();
		boolean flag3 = phone.matches("1[3578]\\d{9}");
		
		String email = qqInfo.getEmail();
		boolean flag4 = email.matches("\\w{3,12}@([A-Za-z0-9]{2,5})(\\.[A-Za-z]{2,5}){1,3}");
		
		Integer age = qqInfo.getAge();
		boolean flag5 = false;
		if (age >= 1 && age <= 150) {
			flag5 = true;
		}
		if (flag1 && flag2 && flag3 && flag4 && flag5) {
			System.out.println("数据正确");
		} else {
			System.out.println("对不起,您输入的数据有误");
		}
	}
}

第五步:在接收数据的实体类中的属性前添加校验的注解

package cn.java.entity;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Email;

/**
 * @Description: TODO
 * @Title: QQ.java
 * @author: Matthew
 * @date: 2019年3月18日 下午7:18:57
 * @version V1.0
 */

public class QQ {
	
	@NotNull(message = "亲,您没有添加昵称")
	@Pattern(regexp = "[\\u4e00-\\u9fa5]{4,10}", message = "*请输入4-10位汉字")
	private String 	nick; // 昵称
	//只能匹配字符串
	@Pattern(regexp = "\\w{3,6}", message = "*请输入3-6位数字、字母、下划线组合")
	private String	password;	// 密码

	private String	phone;		// 手机号
	
	@Email(message = "对不起,您输入的邮箱格式有误")
	private String	email;		// 邮箱
	//只能匹配整数
	@Max(value = 150, message="亲,您还没挂么")
	@Min(value = 1, message="亲,您还没出生吧")
	private Integer	age;		// 年龄

	
	public String getNick() {
		return nick;
	}

	
	public void setNick(String nick) {
		this.nick = nick;
	}

	
	public String getPassword() {
		return password;
	}

	
	public void setPassword(String password) {
		this.password = password;
	}

	
	public String getPhone() {
		return phone;
	}

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

	
	public String getEmail() {
		return email;
	}

	
	public void setEmail(String email) {
		this.email = email;
	}

	
	public Integer getAge() {
		return age;
	}

	
	public void setAge(Integer age) {
		this.age = age;
	}


	@Override
	public String toString() {
		return "QQ [nick=" + nick + ", password=" + password + ", phone=" + phone + ", email=" + email + ", age=" + age
				+ "]";
	}
	
}

第六步:在Controller方法的实体类参数前添加@Valid注解,并且通过BindResult对象类封装错误信息

	@RequestMapping("register2")//BindingResult必须紧挨着实体类后面
	public String register2(@Valid QQ qqInfo, BindingResult errorResult, Model model) {
		//调用校验数据的工具类
		Map<String, Object> resultMap = Validator.fieldValidate(errorResult);
		if (resultMap == null) {//数据正确
			return "front/register_success.jsp";
		} else {//数据错误
			model.addAttribute("errorMessage", resultMap);
			return "front/register.jsp";
		}
	}
package cn.java.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;


/**
 * @Description: TODO数据校验
 * @Title:  Validator.java
 * @author: Matthew
 * @date: 2019年3月19日 下午6:01:03
 * @version V1.0
 */

public class Validator {
	/**
	 * 
	 * Description:校验实体类中的属性是否正确
	 *
	 * @param errorResult
	 * @return:如果返回值为null,则代表数据完全正确;如果不为null,则返回的是一个封装错误信息的map集合
	 */
	public static Map<String, Object> fieldValidate(BindingResult errorResult){
		Map<String, Object> errorMap = null;
		boolean flag = errorResult.hasErrors();
		if (flag) {//数据有错
			errorMap = new HashMap<String, Object>();
			//将字段对应的错误信息打印出来
			List<FieldError> errorLists = errorResult.getFieldErrors();
			//FieldError包装了属性名,regexp,message
			for (FieldError fieldError : errorLists) {
				//1. 获取实体类中的属性名
				String fieldName = fieldError.getField();
				//2. 当数据不满足匹配规则时,获取错误提示信息
				String errorMessage = fieldError.getDefaultMessage();
				errorMap.put(fieldName, errorMessage);
			}
			return errorMap;
		} 
		return null;
	}
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值