15.SpringMVC核心技术-数据验证
发布日期:2021-08-31 13:57:24 浏览次数:25 分类:技术文章

本文共 3754 字,大约阅读时间需要 12 分钟。

Web 应用程序中,为了防止客户端传来的数据引发程序的异常,常常需要对数据进行验证。

输入验证分为客户端验证与服务器端验证。客户端验证主要通过 JavaScript 脚本进 行,

而服务器端验证则主要是通过 Java 代码进行验证。

为了保证数据的安全性,一般情况下,客户端验证与服务器端验证都是要进行的。

我们这里所讲的是 SpringMVC 在服务端是如何对数据进行验证的。

 

搭建测试环境

  1.导入Jar包

  SpringMVC 支持 JSRJava Specification RequestsJava 范提303 - Bean Validation数据验证规范。

  而该规范的实现者很多,其中较常用的是 Hibernate Validator。需要注意的是, Hibernate Validator 是与 

  Hibernate ORM 并列的 Hibernate 的产品之一。这一点从 Hibernate 网上所提供的资源形式可以看出它们之间的关系。 

  所以,除了 SpringMVC  Jar 包外,我们还需要导入 Hibernate Validator  Jar 包。

  这些Jar 包,可以从 Hibernate 官网中直接下载

 

实现数据验证

  1.修改springmvc配置文件

    验证器由SpringMVC框架的LocalValidtorFactoryBean类生成,而真正验证器的提供者是HibernateValidator

    在SpringMVC 配置文件中 将验证器注册后,需要将其注入给注解驱动

  

1 
2
3 4
5
6
7
8 9

 

  2.在实体属性上添加验证注解

  使用的验证器注解均是 javax.validation.constraints包中的类

  在注解的message属性中,可以使用 {属性名}的方式来引用指定的注解的属性值

1 //在实体属性上添加验证注解 2 //使用的验证注解 均为 javax.validation.constraints 3 //在注解的 message(不满足验证条件后的返回的提示信息) 中,可以使用 {属性名} 的方式,来引用属性的 值 4 public class Person { 5     @NotEmpty(message="用户名不能为空") 6     @Size(min=3,max=6,message="用户名长度应为 {min} - {max}位")    7     private String name; 8      9     @Max(value=100,message="分数不能超过 {value}")10     @Min(value=0,message="分数不能低于 {value}")11     private double score;12     13     @NotEmpty(message="手机号不能为空")14     @Pattern(regexp="^1[34578]\\d{9}$",message="手机号码格式不正确")15     private String phoneNumber;16     public String getName() {17         return name;18     }

  NotNull 和 NotEmpty区别:

    NotNull:验证注解的元素值不为 null

    NotEmpty:验证注解的元素值不为 null 且不为空(字符串长度不为 0、集合大小不为 0

  

  3.修改Controller

1 public class MyController { 2      3      4     // 数据验证 5     //由于这里使用的 验证器为 Bean 对象验证器,所以对于要验证的参数数据,需是一个Bean 类型,使用 @Validated 标记这是要检验的 Bean 6     //注: 不能将 @Validated 注解在String类型与基本类型的形参前 7     // 通过 BindingResult 形参 可以获取到所有验证异常信息 (message 里面的) 8     @RequestMapping(value = "/validator.do") 9     public ModelAndView register(@Validated Person person,BindingResult br) {10         ModelAndView mv = new ModelAndView();11         //获取到所有的异常信息,如果没有异常,List也不会 为 null,而是 size = 0;12         List
errors = br.getAllErrors();13 System.out.println(errors.size());14 //如果存在验证异常15 if(errors.size()>0) {16 //获取指定属性的异常信息17 FieldError nameError = br.getFieldError("name");18 FieldError scoreError = br.getFieldError("score");19 FieldError phoneNumberError = br.getFieldError("phoneNumber");20 21 //哪个FileError 不为空(即该属性不符合验证条件),则将对应的错误信息存入ModelAndView22 if(nameError != null) {23 24 //如果不满足多个验证条件,如:不填 同时不满足 (1、不为空,2、3-6字符,)错误信息好像随机选一个的25 mv.addObject("nameError", nameError.getDefaultMessage());26 }27 if(scoreError != null) {28 mv.addObject("scoreError", scoreError.getDefaultMessage());29 }30 if(phoneNumberError != null) {31 mv.addObject("phoneNumberError", phoneNumberError.getDefaultMessage());32 }33 mv.setViewName("/index.jsp");34 return mv;35 }36 mv.addObject("person", person);37 mv.setViewName("/WEB-INF/jsp/hello.jsp");38 return mv;39 40 }41 42 }

  BindingResult 接口中常用的方法有:

  getAllErrors():获取到所有的异常信息。其返回值为List,若没有发生异常,则该List也被创建,

  只不过其size()为0,而非List为null

  getFieldError():获取指定属性的异常信息

  getErrorCount(): 获取所有异常的数量

  getRawFieldValue():获取到用户输入的引发验证异常的原始值

  

  4.页面显示异常信息

1 
2 name :
${nameError }
3 score :
${scoreError }
4 phoneNumber:
${phoneNumberError }
5
6

 

  

转载于:https://www.cnblogs.com/xuzekun/p/7416830.html

转载地址:https://blog.csdn.net/weixin_34077371/article/details/93073311 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:reverse mapping checking getaddrinfo for bogon failed – POSSIBLE BREAK-IN ATTEMPT! 错误
下一篇:应答文件的安装过程

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月09日 08时01分39秒