SpringMVC数据校验

我们在使用 SpringMVC 处理前台请求的时候,对于传输过来的数据我们可以通过对象的方式来接收,为了保证数据的合法性,我们往往需要对数据进行合法性校验(尽管前台已经进行了 js 验证),简单类型的数据,我们一般 if (str == null || str.length().trim() == 0) return ...,但是如果是对象,校验就相对复杂一些,不仅要进行非 null 判断,还要对里面的属性逐一的进行判断,很麻烦,所以可以使用 Hibernate 提供的校验器来简化校验操作。

步骤:

一、导入所需的 jar 包

这里写图片描述

maven 项目的话直接添加如下 dependency 节点即可:

<!-- 引入hibernate的校验器实现 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
</dependency>

二、在 SpringMVC 配置文件中注册校验器

在 springmvc.xml 中注册 hibernate 的校验器,并在原来的 mvc 注解驱动中设置 validator 属性:

<!--开启mvc注解驱动  -->
<mvc:annotation-driven validator="validator" />

<!-- 注册hibernate的校验器 -->
<bean id = "validator" class = "org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
	<property name="providerClass" value ="org.hibernate.validator.HibernateValidator"></property>  		
</bean>

三、在所需校验的对象所对应的实体类属性上加上相应的校验注解

一些常用的校验规则:

  • @NotNull 对象不为空
  • @AssertTrue Boolean 对象是否为 true
  • @AssertFalse 验证 Boolean 对象是否为 false
  • @Size(min =, max =) 长度是否在给定的范围
  • @Min(value=) 验证 Number 对象是否大等于指定的值
  • @Max(value=) 验证 Number 对象是否小等于指定的值
  • @Pattern 验证 String 对象是否符合正则表达式的规则
  • @Past @Future验证 Date 和 Calendar 时间对象是否在当前时间之前/之后
  • @Email 是否是正确的邮箱地址

比如说我要校验 Admin(管理员)对象:

package com.qjl.pems.entity;

import java.util.Date;

import javax.validation.constraints.Past;

import org.hibernate.validator.constraints.NotEmpty;

/**
 * 类名称:管理员实体类
 * 全限定性类名: com.qjl.pems.entity.Admin
 * @author 曲健磊
 * @date 2018年8月12日下午2:03:04
 * @version V1.0
 */
public class Admin {
    private Integer id;

    @NotEmpty(message="真实姓名不能为空")
    private String realName;

    @NotEmpty(message="登录名称不能为空")
    private String loginName;

    private String password;

    @NotEmpty(message="出生日期不能为空")
    @Past(message="当前输入的出生日期不可信")
    private Date birthday;

    @NotEmpty(message="性别不能为空")
    private String sex;

	...
}

四、在 SpringMVC 的 handler 方法中需要进行校验的对象前加上 @Validated 注解,并在校验对象后加上一个 BindingResult 对象接收校验信息

对应的控制器方法:

/**
 * 处理添加管理员的请求
 * @param admin 前台发送的管理员信息
 * @return 添加成功与否的提示信息
 */
@RequestMapping("/insertAdmin")
public @ResponseBody Map<String, Object> insertAdmin(@Validated Admin admin, BindingResult bindingResult) {
	Map<String, Object> resultMap = new HashMap<String, Object>();
	
	// 如果校验时有不符合校验规则的情况出现,springMVC会将错误信息放在BindingResult对象的错误提示信息里面
	if (bindingResult.hasErrors()) {
		List<ObjectError> errors = bindingResult.getAllErrors();
		for (ObjectError error : errors) {
			System.out.println(error.getDefaultMessage());
		}
		resultMap.put("errors", errors);
		return resultMap;
	}
	
	...
	
	return resultMap;
}
  1. 在需要校验的对象前加 @Validated注解。

  2. 在该对象后加一个参数:BindingResut 来接收校验信息。

  3. 调用 BindingResult 对象的 hasErrors 方法判断前台传过来的参数是否符合校验规则,有一个不符合规则,hasErrors 方法就会返回 true。

  4. 然后调用 getAllErrors() 方法获取 ObjectError 的 list 列表。

  5. 遍历集合,调用每个对象的 getDefaultMessage() 方法,获取相应的错误提示信息(在实体类上配置的)

  6. 获取到校验信息后再返回给前台或做一些其他的处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值