SpringMVC 数据校验方法(必看篇)

数据校验在web应用里是非常重要的功能,尤其是在表单输入中。在这里采用Hibernate-Vapdator进行校验,该方法实现了JSR-303验证框架支持注解风格的验证。

一、导入jar包

若要实现数据校验功能,需要导入必要的jar包,主要包括以下几个:

classmate-1.3.1.jar

hibernate-vapdator-5.4.1.Final.jar

hibernate-vapdator-annotation-processor-5.4.1.Final.jar

hibernate-vapdator-cdi-5.4.1.Final.jar

jboss-logging-3.3.0.Final.jar

vapdation-api-1.1.0.Final.jar

二、常用的校验注解

注解 功能
@Null 验证对象是否为 null
@NotNull 验证对象是否不为 null
@AssertTrue 验证 Boolean 对象是否为 true
@AssertTrue 验证 Boolean 对象是否为 false
@Max(value) 验证 Number 和 String 对象是否小于等于指定值
@Min(value) 验证 Number 和 String 对象是否大于等于指定值
@DecimalMax(value) 验证注解的元素值小于等于 @DecimalMax 指定的 value 值
@DecimalMin(value) 验证注解的元素值大于等于 @DecimalMin 指定的 value 值
@Digits(integer,fraction) 验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction 指定小数精度
@Size(min,max) 验证对象长度是否在给定的范围内
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
@NotBlank 检查字符串是不是 Null,被 Trim 的长度是否大于0,只对字符串,且会去掉前后空格
@URL 验证是否是合法的 url
@Email 验证是否是合法的邮箱
@CreditCardNumber 验证是否是合法的信用卡号
@Length(min,max) 验证字符串的长度必须在指定范围内
@NotEmpty 检查元素是否为 Null 或 Empty
@Range(min,max,message) 验证属性值必须在合适的范围内

三、修改实体类

在类的属性上进行标注,如:

public class User {
  @NotBlank(message = "Username can not be empty")
  private String username;
  @NotBlank(message = "password can not be blank")
  @Length(min = 6, max = 16, message = "The length of the password must be between 6 and 16 bits")
  private String password;
  @Range(min = 18, max = 60, message = "Age must be between 18 and 60 years old")
  private Integer age;
  @Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "Please enter the correct format of the phone number")
  private String phone;
  @Email(message = "Please enter a valid email address")
  private String email;

  // other...
}

四、修改相应的处理方法

@RequestMapping(value = "/register")
public String register(@Valid @ModelAttribute("user") User user, Errors errors,Model model) {
  if(errors.hasErrors()){
    return "register";
  }
  model.addAttribute("user", user);
  return "success";
}

五、视图输出

校验之后,我们通常需要在表单的输入框后进行文字反馈:

<form:form modelAttribute="user" method="post" action="register">
  <fieldset>
    <legend>register</legend>
    <p>
      <label>name:</label>
      <form:input path="username" />
      <form:errors path="username" cssStyle="color:red"/>
    </p>
     ...
  </fieldset>
</form:form>

然而,有些时候并不推荐直接将错误信息写在注解的message属性里,这样不方便国际化。因此可以做以下几处修改:

1. 新建validatemessages.properties

username.not.blank = "username cannot be empty..."
password.not.blank = "password cannot be empty"
password.not.length = "password should be in 6-10"
age.not.range = "age should be in 10-70"
phone.not.pattern = "phone should be in format"
email.not.format = "email should be in format"

2. 实体类中的注解使用相对引用

public class User {

  @NotBlank(message = "{username.not.blank}")
  private String username;

  @NotBlank(message = "{password.not.blank}")
  @Length(min = 6, max = 10, message = "{password.not.length}")
  private String password;

  @Range(min = 10, max = 70, message = "{age.not.range}")
  private Integer age;

  @Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "{phone.not.pattern}")
  private String phone;

  @Email(message = "{email.not.format}")
  private String email;

  // other...
}

3. 修改配置文件

<!-- 默认的注解映射的支持 -->
  <mvc:annotation-driven validator="validator" conversion-service="conversion-service" />

  <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
    <!--不设置则默认为classpath下的 ValidationMessages.properties -->
    <property name="validationMessageSource" ref="validatemessageSource"/>
  </bean>
  <bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
  <bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:validatemessages"/>
    <property name="fileEncodings" value="utf-8"/>
    <property name="cacheSeconds" value="120"/>
  </bean>

特别注意:value="classpath:validatemessages",文件名不加后缀!

至此,数据校验的整个过程就结束了。

最后还要特别强调的重点是:

视图中<form:form modelAttribute="contentModel" method="post">的modelAttribute="xxx"后面的名称xxx必须与对应的@Valid @ModelAttribute("xxx") 中的xxx名称一致,否则模型数据和错误信息都绑定不到。

<form:errors path="name"></form:errors>即会显示模型对应属性的错误信息,当path="*"时则显示模型全部属性的错误信息。

以上这篇SpringMVC 数据校验方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springmvc的validator数据校验的实现示例代码

    一.什么是数据校验? 这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验. 数据校验分为客户端校验和服务端校验 客户端校验:js校验 服务端校验:springmvc使用validation校验,struts2使用validation校验.都有自己的一套校验规则. 二.springmvc的validation校验 Springmvc本身没有校验功能,它使用hibernate的校验框架,hibernate的校验框架和orm

  • springmvc使用JSR-303进行数据校验实例

    项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验.然而对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的参数的合法性.在服务端控制层controller校验,不区分客户端类型. 业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数. 持久层dao:一般是不校验的. 环境集成 1.添加jar包: 此处使用hibernate-validator实现(版本:hiber

  • SpringMVC 数据校验方法(必看篇)

    数据校验在web应用里是非常重要的功能,尤其是在表单输入中.在这里采用Hibernate-Vapdator进行校验,该方法实现了JSR-303验证框架支持注解风格的验证. 一.导入jar包 若要实现数据校验功能,需要导入必要的jar包,主要包括以下几个: classmate-1.3.1.jar hibernate-vapdator-5.4.1.Final.jar hibernate-vapdator-annotation-processor-5.4.1.Final.jar hibernate-v

  • ajax调用返回php接口返回json数据的方法(必看篇)

    php代码如下: <?php header('Content-Type: application/json'); header('Content-Type: text/html;charset=utf-8'); $email = $_GET['email']; $user = []; $conn = @mysql_connect("localhost","Test","123456") or die("Failed in conn

  • Java的基本数据类型和运算方法(必看篇)

    编码 ASCII--0~127 65-A 97-a 西欧码表---ISO-8859-1---0-255---1个字节 gb2312----0-65535---gbk---2个字节 Unicode编码体系---utf-8---3个字节 中 f bit位 Byte字节 1Byte = 8bit 1KB=1024B MB GB TB PB---计算机中存储单位 常量 整数常量---所有的整数 3,99,107 小数常量---所有的小数 3.5 100.9 字符常量---用单引号将一个字母.数字.符号标

  • js遍历获取表格内数据的方法(必看)

    本文将介绍如何使用js获取表格内某一单元格的内容,表格由table,tr,td等html标记组成.table表示表格,tr表示行,td表示行中列. 1.一般的表格结构如下 <table> <tr> <td>id</td> <td>name</td> </tr> <tr> <td>1</td> <td>fdipzone</td> </tr> <tr

  • 基于hibernate框架在eclipse下的配置方法(必看篇)

    一.ORM O:object 对象 R:Realtion 关系(关系型数据库) M:Mapping 映射 ORM:对象关系型映射 目前流行的编程语言,如Java.C# ,它们都是面向对象的编程语言,而目前主流的数据库产品例如Oracle.DB2等,依然是关系型数据库.编程语言和底层数据库发展的不协调(阻抗不匹配,例如数据库中无法直接实现存储继承.多态.封装等特征和行为),催生出了ORM框架.ORM框架可以作为面向对象语言和关系型数据库之间的桥梁. 二.Hibernate Hibernate是一个

  • java 获取HttpRequest Header的几种方法(必看篇)

    在开发应用程序的过程中,如果有多个应用,通常会通过一个portal 门户来集成,这个portal  是所有应用程序的入口,用户一旦在portal 登录之后,进入另外一个系统,就需要类似的单点登录(SSO). 进入各个子系统的时候,就不需要再次登录, 当然类似的功能,你可以通过专业的单点登录软件来实现,也可以自己写数据库token 等方式来实现.其实还有一个比较简单的方法,就是通过 portal 封装已经登录过的用户的消息,写到http header 之中,然后把请求forward 到各个子系统中

  • Android之有效防止按钮多次重复点击的方法(必看篇)

    为了防止测试妹子或者用户频繁点击某个按钮,导致程序在短时间内进行多次数据提交or数据处理,那到时候就比较坑了~ 那么如何有效避免这种情况的发生呢? 我的想法是,判断用户点击按钮间隔时间,如果间隔时间太短,则认为是无效操作,否则进行相关业务处理 首先将这块提取为工具类(方便接下来的调用),现在就起名为:ButtonUtils public class ButtonUtils { private static long lastClickTime = 0; private static long D

  • Android 处理空列表的方法(必看篇)

    android中ListView 用来展示数据,如果列表为空的状态,可以通过setEmpty(View)方法设置为空时显示的内容. 布局xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android

  • Django 添加静态文件的两种实现方法(必看篇)

    Django添加静态文件有两种方法: 首先setting.py配置文件中添加静态文件的路径: STATICFILES_DIRS = [ os.path.join(BASE_DIR, "statics"),]  statices为你所建立的存放静态文件的文件夹名 然后进行引用. 1.html 文件中通过 /static/资源名的方式,就可以访问到资源 2.①html 文件头部填写  {% load staticfiles %},②路径填写  {% static 'css/xx.css'

  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit 和 FluentEmail , 下面我对它们分别进行介绍. MailKit 在 ASP.NET Core 中,可以使用 MailKit 来发送邮件,它支持跨平台,并且支持 IMAP, POP3, SMTP 等协议. 你可以使用下面的方式安装: Install-Package MailKit 下面是

随机推荐