java mvc 验证,Spring MVC的数据校验

数据校验分为:客户端校验与服务端校验。这边主要讲的是Spring MVC提供的服务端校验功能,一种是Spring 自带的Validation校验框架,一种是利用JSR 303(Java验证规范)实现校验功能。

1.Spring Validation框架(org.springframework.validation)

Spring拥有自己独立的数据校验框架。Spring在进行数据绑定时,可同事调用校验框架来完成数据校验工作。

1.1 Validation重要的接口和类

Validator(最重要的接口)

对clazz 类型的对象进行校验

boolean supports(Class> clazz);

对target对象进行校验,并将校验错误记录记录到errors对象中

void validate(Object target, Errors errors);

Errors(Spring存放错误信息接口)

ValidationUtils

校验工具类,提供了多个给Errors对象保存方法

LocalValidatorFactoryBean

位于org.springframework.validation.beanvalidation包中,该类既实现利了Spring的Validator接口,也实现了JSR 303的Validation接口。只要在Spring容器中定义了一个LocationValidationFactoryBean,即可将其注入到需要数据校验的Bean中。

xml配置

会默认装配好一个LocalValidatorFactoryBean,所以在实际开发中,无须手动再配置xml节点。

2.实现Spring的Validation校验

后台代码

public class UserValidator implements Validator {

@Override

public boolean supports(Class> clazz) {

return User.class.equals(clazz);

}

@Override

public void validate(Object target, Errors errors) {

ValidationUtils.rejectIfEmpty(errors,"name",null,"用户名不能为空");

ValidationUtils.rejectIfEmpty(errors,"password",null,"密码不能为空");

}

}

@InitBinder

public void initBinder(DataBinder binder) {

binder.setValidator(new UserValidator());

}

@RequestMapping(value = "register", method = RequestMethod.POST)

public String register(@Validated User user, Errors errors) {

if (errors.hasErrors())

return "signup";

return "";

}

前端jsp页面

Sign Up
用户名:
密码:

注意上面的校验方式是在请求入口加上@Validated。如果不想这么写,可以使用@Repository注解将自定义的Validator注释为Spring容器的一个bean。这边就不演示了,了解下就可以了。在实际项目中,我们使用更多的是基于注解式校验。

3. JSR 303校验

JSR 30是Java为Bean数据合法性校验所提供的一个标准规范,叫做Bean Validation。官方参考实现Hibernate Validator

引入Jar包

compile group: 'org.hibernate.validator', name: 'hibernate-validator', version: '6.0.0.CR3'

在需要校验的类上加上特性标记

public class User implements Serializable {

@NotBlank(message = "用户名不能为空")

private String name;

@NotBlank(message = "用户密码不能为空")

private String password;

}

前台页面

前台页面跟上面一致,没有任何改变。看到没,这样的实现的方式是否更优雅。

3.1 JSR 303 注解

注解

功能

@Null

验证对象是否为null

@NotNull

验证对象是否不为null,无法检查长度为0的字符串

@Max

验证Number和String对象是否小于等于指定的值

@Min

验证Number和String对象是否大于等于指定的值

@Pattern

验证String对象是否符合正则表达式

@Size(min,max)

验证对象长度是否在给定的范围内

@Digits(interger,fraction)

验证字符串是否符合格式化的数字

@Past

验证时间对象是否在给定时间之前

@Future

验证时间对象是否在给定时间之后

3.2 Hibernate Validator扩展的注解

注解

功能

@NotBlank

检查约束字符串是不是Null,被Trim的长度是否大于0,只对字符串,且会去掉前后空格

@URL

验证是否是合法的URL

@Email

验证是否是合法的邮件地址

@CreditCardNumber

验证是否是合法的信用卡号

@Length(min,max)

验证字符串的长度是否在指定的范围

@NotEmpty

检查元素是否为NULL,或者Empty。用于Array、Collection、Map、String

@Range(min,max,message)

验证属性值必须在合适的范围内。eg:Range(min=18,max=60,message="学生年龄必须在18岁与60岁之间。")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值