您的位置:首页 > 编程语言 > Java开发

springMVC学习笔记(三) 数据校验

2018-03-12 23:18 477 查看
( 八 ) spring校验
传统的做法: 前天数据输入做正则  , js  检验数据 , 为了防止一些技术人破坏性数据传输  , 一般都会在后天继续做验证 ,
1/验证数据是否空   2/ 验证数据是否符合正则 ,是否属于有效值   3/  jdbc   持久化
相对于这样的做法  ,代码重复多 ,  安全性低 , 可操作性查 等
______________________________________________________________________________________________________________________________________________

              hibernate-validator注解文档
______________________________________________________________________________________________________________________________________________
@AssertTrue //用于boolean字段,该字段只能为true
@AssertFalse//该字段的值只能为false
@CreditCardNumber//对信用卡号进行一个大致的验证
@DecimalMax//只能小于或等于该值
@DecimalMin//只能大于或等于该值
@Digits(integer=2,fraction=20)//检查是否是一种数字的整数、分数,小数位数的数字。
@Email//检查是否是一个有效的email地址
@Future//检查该字段的日期是否是属于将来的日期
@Length(min=,max=)//检查所属的字段的长度是否在min和max之间,只能用于字符串
@Max//该字段的值只能小于或等于该值
@Min//该字段的值只能大于或等于该值
@NotNull//不能为null
@NotBlank//不能为空,检查时会将空格忽略
@NotEmpty//不能为空,这里的空是指空字符串
@Null//检查该字段为空
@Past//检查该字段的日期是在过去
@Size(min=, max=)//检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
@URL(protocol=,host,port)//检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件
@Valid//该注解只要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,在接收数据同时会进行校验
//这样在检查
______________________________________________________________________________________________________________________________________________
spring 校验 :
1/ 导入jar包   classmate   Hibernate-validation jboss-logging  validation-api   四个jar包
2/ 在springmvc.xml配置相关bean
<mvc:annotation-driven validator="validator"/>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">

4000
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
</bean>
_____________________________________________________________________________________________________________________________________________
3/ 在2的基础上,在相应的类上加上注解
a/ 在实体类上加上注解      如下方式
=============================================================================================
@Null(message = "亲,您没有填写昵称")            //注意: 要将校验注解添加在属性的上方
@Pattern(regexp = "[\\u4e00-\\u9fa5]{4,10}", message = "*昵称必须为4-10位汉字")
private String nick;// 昵称                       //  注意  :   @Pattern只能校验字符串
//注意 : 如果未加  @Null  如果传入的是null空值 , 则不会执行上面注解
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
------>@Null   验证对象是否为null
@NotNull验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY,用在集合类上面
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

b/  在controller 里  相应的控制器方法体的参数位置加上   @Valid  注解   表示在接收前台页面传入数据的时候进行校验
其遵守的校验规则就是我们在实体类属性上通过注解的方式添加的规则
================================================================================================
@RequestMapping(value = "addQqUser")
public String addQqUser(@Valid QQ qqInfo, BindingResult bindingResult){
//校验工作开始
// 1/ 在实体类里根据需要在属性上加入注解进行验证
// 2/ 在本方法体的参数位置加上注解  @Valid
// 3/ bindingResult  会接收校验返回的数据
================================================================================================
@RequestMapping(value = "addQqUser")
public String addQqUser(@Valid QQ qqInfo, BindingResult bindingResult){
boolean s = bindingResult.hasErrors();  //是否有错误?
if (s) {
List<FieldError> pojonames = bindingResult.getFieldErrors();     // 获取出现错误的字段集合
for (FieldError var : pojonames) {      //测试返回的数据...优化代码可直接删除..
String pojiname = var.getField();     //  获取属性名
String errormsg = var.getDefaultMessage();   //  获取错误信息提示
System.out.println(pojiname + "==================" + errormsg );
}     //  此处的for循环可直接略过 ,  此处做 spring 校验是否起作用测试
return "error";
}else {
System.out.println("调用业务层方法处理数据......");
}
return "validationtest/regiter_success";
}
_________________________________________________________________________________________________________________________
将公共代码抽取出来,使用静态工具类,完成错误回显提示 ,  当然这里用的是传统方式 ,  最佳应采用ajax完成!
_________________________________________________________________________________________________________________________
@RequestMapping(value = "addQqUser")
public String addQqUser(@Valid QQ qqInfo, BindingResult bindingResult , Model model){
Map<String , Object> map = ValidationString.validationString(bindingResult);
if (map!=null) {
model.addAttribute("error",map);
model.addAttribute("qq",qqInfo);
return "validationtest/addqq";
}else {
System.out.println("调用业务逻辑处理数据.....封装信息   跳转页面....");
return "validationtest/regiter_success";
}
}
[ 注意 :@Valid QQ qqInfo, BindingResult bindingResult   这个BindingResult必须在校验对象之后 否则会出错  框架的问题]
========================================================================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: