springmvc的数据校验

springmvc中做数据验证需要的包
hibernate-validator-6.0.13.Final.jar
validation-api-2.0.1.Final.jar
jboss-logging-3.3.2.Final.jar

1、在需要验证的pojo中加注解

@Size(max=  最大长度,min=最小长度,message="{错误属性文件中的键}")
@Pattern(regexp="\\d{18}",message="{register.usercardno.format.error}")  //18位数字的正则表达式:\d{18}(在java中“\”要转义) 或 [0-9]{18};

需要验证的pojo

package com.web.auction.pojo;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class Auctionuser {
    private Integer userid;
    
    //用户名长度必须在3到18之间
    @Size(min=3,max=18,message="{register.username.length.error}")
    private String username;
    
    //密码的长度必须大于等于6
    @Size(min=6,message= "{register.password.length.error}")
    private String userpassword;
    
    //省份证号必须为18位数字
    @Pattern(regexp="\\d{18}",message="{register.usercardno.format.error}")  //18位数字的正则表达式:\d{18}(在java中“\”要转义) 或 [0-9]{18}
    private String usercardno;
    
    //电话必须为11位数字
    @Pattern(regexp="[0-9]{11}",message="{register.telephone.format.error}")
    private String usertel;
    
  /**** 省略setters和getters     ******/
}

2、设置错误属性文件,不同字段验证失败的错误信息

ValidationMessages.properties属性文件,他们的值是中文对应的编码,具体意思是其后面的中文注释

register.username.length.error=\u7528\u6237\u540D\u5FC5\u987B\u4E3A3\u523018\u4F4D    //用户名必须为3道18位
register.password.length.error=\u5BC6\u7801\u5FC5\u987B\u5927\u4E8E\u7B49\u4E8E6\u4F4D  //密码必须大于等于6位
register.usercardno.format.error=\u8EAB\u4EFD\u8BC1\u53F7\u7801\u5FC5\u987B\u4E3A18\u4F4D\u6570\u5B57—  //身份证号必须为18位
register.telephone.format.error=\u7535\u8BDD\u5FC5\u987B\u4E3A11\u4F4D\u6570\u5B57  //电话必须为11位

3、在需要验证的controller方法中该POJO对象的参数添加@Validated注解,并在POJO参数之后紧跟bindingResult对象(该对象保存验证错误的信息)

这里对注册需要保存的用户信息进行数字校验


//BindingResult bindingResult是存储错误信息的容器,必须紧跟在要验证的pojo之后
	@RequestMapping("/register")
	public String register(Model model,@ModelAttribute("registerUser") @Validated Auctionuser auctionUser,BindingResult bindingResult) {
		//如果数字校验出错,即不满足注册时不满足第一步中对应属性的要求,则会产生第二步中对应的错误,bindingResult用于存放这些错误信息
		if(bindingResult.hasErrors()) {
			//获取错误信息列表
			List<FieldError> list = bindingResult.getFieldErrors();
			for (FieldError fieldError : list) {
				//getField()方法获得了input标签的name属性值
				//如:  用户名:<input type="text" name="username">
				//如果用户名校验出错,则getField()获得的值为name属性值“username”
				String key = fieldError.getField();
				//获得对应的报错信息,即第二步中属性文件中对应错误信息的值
				String value = fieldError.getDefaultMessage();
				System.out.println(key+"=="+value);
				//保存到model中,返回界面
				model.addAttribute(key, value);
			}
			//处理完错误,跳回注册页面
			return "register";
		}
		
		//如果没有错误,才能进行注册
		//2、完成注册,把用户信息存入数据库
		this.userService.addUser(auctionUser);
		
		return "login";
	}
	

处理错误:
使用bindingResult对象hasErrors()判断是否有错误,
有错误,使用getFieldError()获取错误列表;
把错误存入作用域中,
每个filedError有个获取对应标签name属性的方法getField(),这是错误信息的键
fieldError.getDefaultMessage()这是错误信息的值

4、把错误回显到页面

这里使用的是thymeleaf静态模版

<div class="wrap">
  <!-- main begin-->
  <form action="/register">
      <div class="zclf login logns">
        <h1  class="blue">用户注册</h1>
          <dl>
            <dd>
              <label> <small>*</small>用户名</label>
              <input type="text" class="inputh lf" name="username" th:value="${registerUser.username}" />
              <!-- 这里的${username} 即取第三步中存入的key-value对,
              key为getField()方法获得的username,
              value为getDefaultMessage()方法获得的错误信息:“用户名必须为3到18位” -->
              <span class="red laba" th:text="${username}"></span>
            </dd>
            <dd>
              <label> <small>*</small>密码</label>
              <input type="text" class="inputh lf" name="userpassword" th:value="${registerUser.userpassword}" />
              <span class="red laba" th:text="${userpassword}"></span>
            </dd>
            <dd>
              <label> <small>*</small>身份证号</label>
              <input type="text" class="inputh lf" name="usercardno" th:value="${registerUser.usercardno}" />
              <span class="red laba" th:text="${usercardno}"></span>
            </dd>
            <dd>
              <label> <small>*</small>电话</label>
              <input type="text" class="inputh lf" name="usertel" th:value="${registerUser.usertel}" />
              <span class="red laba" th:text="${usertel}"></span>
            </dd>
          </dl>
    </div>
<!-- main end-->
  </form>
<!-- footer begin-->

</div>
 <!--footer end-->

运行结果如图
当输入对应的属性不符合要求并点击注册时,回到页面,给出提示信息
在这里插入图片描述

5、本文中使用到的注解

数据校验注解,是jaax包中的注解
@Size(max= 最大长度,min=最小长度,message="出现错误的提示信息")
@Pattern(regexp="正则表达式",message="出现错误的提示信息")  

@Validated:制定该参数传入controller方法时要进行校验
@ModelAttribute(name="存入model中的名字"): 定义其后的参数进行数据回显,就是把其后的参数添加到model中
 相当于model.addAttribute("xxx",xxx);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值