Spring MVC 之输入验证(六)

Spring MVC 验证主要还是用的是hibernate的验证。so需要添加以下的jar包:

1、 hibernate-validator-5.2.2.Final.jar

2、hibernate-validator-annotation-processor-5.2.2.Final.jar (这个可以不用)

3、 log4j.jar

4 、slf4j-api-1.5.6.jar

5、 slf4j-log4j12-1.5.6.jar

6 、validation-api-1.1.0.Final.jar

以登录验证为例:

在实体属性上配置注解;

package com.cy.springannotation.entity;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * 定义一个表单实体类
 * @author acer
 *
 */
public class UserBean {
    //要求属性名必须要和表单的参数名一样的!

    @NotEmpty(message="用户名不能为空!")
    @Pattern(regexp="\\w{6,20}",message="用户名6-20位")
    private String username;

    @NotEmpty(message="密码不能为空")
    @Length(max=20,min=6,message="密码不能小于6位")
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

JSP页面上通过spring标记来获取错误信息:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 <!-- srpingmvc 验证需要使用到spring表单标签 -->
 7 <%@ taglib prefix="springform" uri="http://www.springframework.org/tags/form" %>
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10   <head>
11     <base href="<%=basePath%>">
12
13     <title>验证页面</title>
14
15     <meta http-equiv="pragma" content="no-cache">
16     <meta http-equiv="cache-control" content="no-cache">
17     <meta http-equiv="expires" content="0">
18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
19     <meta http-equiv="description" content="This is my page">
20     <!--
21     <link rel="stylesheet" type="text/css" href="styles.css">
22     -->
23
24   </head>
25
26   <body>
27
28    <!-- commandName用于指定活动的Bean对象,即我可以在页面上,获取对象属性所对应的错误信息,值是对象名称的首字母小写,同modelAttribute一样的意思(modelAttribute="contentModel") -->
29   <!--  <springform:form method="post" action="login.do" commandName="userBean"> -->
30    <springform:form method="post" action="login.do" modelAttribute="user">
31
32     <table>
33        <tr>
34            <td>用户名:</td>
35            <td><input type="text" name="username"/><springform:errors delimiter="," path="username"></springform:errors></td>
36        </tr>
37         <tr>
38            <td>密码</td>
39            <td><input type="text" name="password"/><springform:errors delimiter="," path="password"></springform:errors></td>
40        </tr>
41        <tr>
42            <td colspan="2"> <input type="submit" value="提交"/> </td>
43        </tr>
44     </table>
45 </springform:form>
46   </body>
47 </html>

delimiter:如果一个属性有多个错误,错误信息的分隔符。默认是换行.

path:验证失败的属性名.

控制器:

 1 @RequestMapping(value="/login.do")
 2     //@Valid 通过该注解告知该方法,我的哪个实体Bean需要验证
 3     //BindingResult 为固定参数,用于接收验证结果
 4
 5     public String login(@ModelAttribute("user") @Valid UserBean user,BindingResult br) {
 6         if(br.hasErrors()){
 7             //验证未通过则
 8             return "validate1";
 9         }
10         log.info(user.getUsername());
11         log.info(user.getPassword());
12
13         return "index";
14     }

如果界面上使用了spring标签,那么需要预先启动Spring容器,所以在web.xml中增加配置:

 1 <!-- 启动spring容器,用于支持springmvc validate -->
 2   <context-param>
 3     <param-name>contextConfigLocation</param-name>
 4     <param-value>/WEB-INF/classes/springAnnotation-servlet.xml</param-value>
 5 </context-param>
 6
 7 <!-- 配置在context-param里面文件内的内容,需要通过 ContextLoaderListener添加到上下文里面去-->
 8   <listener>
 9     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
10   </listener>

到springAnnotation-servlet.xml文件中配置:

1 <!-- 开启注解这里需要添加个validator-->
2 <!--开启注解  -->
3 <mvc:annotation-driven conversion-service="tc" validator="validator" />
4
5 <!-- 验证配置,告知srpingmvc,我使用的是Hibernate验证框架来完成的验证 -->
6     <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
7         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
8     </bean>

显示测试:

进入登录页面

直接点击提交:

下面是主要的验证注解及说明:


注解


适用的数据类型


说明


@AssertFalse


Boolean, boolean


验证注解的元素值是false


@AssertTrue


Boolean, boolean


验证注解的元素值是true


@DecimalMax(value=x)


BigDecimal, BigInteger, String, byte,short, int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of Number andCharSequence.


验证注解的元素值小于等于@ DecimalMax指定的value值


@DecimalMin(value=x)


BigDecimal, BigInteger, String, byte,short, int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of Number andCharSequence.


验证注解的元素值小于等于@ DecimalMin指定的value值


@Digits(integer=整数位数, fraction=小数位数)


BigDecimal, BigInteger, String, byte,short, int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of Number andCharSequence.


验证注解的元素值的整数位数和小数位数上限


@Future


java.util.Date, java.util.Calendar; Additionally supported by HV, if theJoda Time date/time API is on the class path: any implementations ofReadablePartial andReadableInstant.


验证注解的元素值(日期类型)比当前时间晚


@Max(value=x)


BigDecimal, BigInteger, byte, short,int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type ofCharSequence (the numeric value represented by the character sequence is evaluated), any sub-type of Number.


验证注解的元素值小于等于@Max指定的value值


@Min(value=x)


BigDecimal, BigInteger, byte, short,int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of CharSequence (the numeric value represented by the char sequence is evaluated), any sub-type of Number.


验证注解的元素值大于等于@Min指定的value值


@NotNull


Any type


验证注解的元素值不是null


@Null


Any type


验证注解的元素值是null


@Past


java.util.Date, java.util.Calendar; Additionally supported by HV, if theJoda Time date/time API is on the class path: any implementations ofReadablePartial andReadableInstant.


验证注解的元素值(日期类型)比当前时间早


@Pattern(regex=正则表达式, flag=)


String. Additionally supported by HV: any sub-type of CharSequence.


验证注解的元素值与指定的正则表达式匹配


@Size(min=最小值, max=最大值)


String, Collection, Map and arrays. Additionally supported by HV: any sub-type of CharSequence.


验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小


@Valid


Any non-primitive type(引用类型)


验证关联的对象,如账户对象里有一个订单对象,指定验证订单对象


@NotEmpty


CharSequence,CollectionMap and Arrays


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


@Range(min=最小值, max=最大值)


CharSequence, Collection, Map and Arrays,BigDecimal, BigInteger, CharSequence, byte, short, int, long and the respective wrappers of the primitive types


验证注解的元素值在最小值和最大值之间


@NotBlank


CharSequence


验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格


@Length(min=下限, max=上限)


CharSequence


验证注解的元素值长度在min和max区间内


@Email


CharSequence


验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

时间: 2024-12-15 19:51:32

Spring MVC 之输入验证(六)的相关文章

JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题. 为了避免这样或那样的情况发生,最好是将验证逻辑与相应的数据模型进行绑定. 1. JSR-303 Bean Validation JSR 是Java Specification Requests 的缩写,是指向 JCP(Java Community Proces

Spring MVC 表单验证

1. 基于 JSR-303(一个数据验证的规范): import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import org.hibernate.validator.constraints.NotBlank; public class User { private String username; private String password; private int age

Spring MVC 学习总结(六)——Spring+Spring MVC+MyBatis框架集成

目录 一.新建一个基于Maven的Web项目    二.创建数据库与表    三.添加依赖包    四.新建POJO实体层    五.新建MyBatis SQL映射层    六.JUnit测试数据访问    七.完成Spring整合MyBatis配置    八.配置web.xml加载Spring容器与MVC    九.创建服务层     十.完成商品管理功能    10.1.商品列表与分页    11.2.删除与多删除功能    11.3.新增商品功能    11.4.编辑商品功能    11.

spring mvc @Valid 数据验证

//对书的单价校验不能是空,价格在20-100之间   @DecimalMax(value = "100", message = "价格不超过100元")   @DecimalMin(value = "20",message = "价格不低于20元") @Pattern(regexp = "1[345678][0-9]{9}",message = "手机号不符合规格") @IDValid

[Spring MVC] - InitBinder验证

Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的表单验证,使用annotation验证即可以解决. Annotation验证使用方法可参见:http://www.cnblogs.com/HD/p/4123146.html 这里需要注意的一点:InitBinder和Annotation两种验证只能二选一,如果使用了InitBinder,就不能使用A

[Spring MVC] - Annotation验证

使用Spring MVC的Annotation验证可以直接对view model的简单数据验证,注意,这里是简单的,如果model的数据验证需要有一些比较复杂的业务逻辑性在里头,只是使用annotation做验证是比较难的. 以下是使用Spring MVC自带的annotation验证,加上自定义的一个@Tel的annotation验证例子,此例子具有: 1.支持多语言(国际化) 2.对默认数据先进行转化,比如int.date类型如果传入空值时,会抛异常,默认给定值 先看配置: 1.web.xm

Spring MVC Maven 环境搭建与部署

本文简单演示了本地开发环境的搭建.项目出包.部署运行.HelloWorld,以及部分注意事项. 起初的玩法:先安装Eclipse,然后分别下载并安装Maven.spring的插件,再进行工程模式转换,也许还需要手动配置Output Path什么的. 现在……我们可以直接使用STS完成所有工作. STS : The Spring Tool Suite? (STS) provides the best Eclipse-powered development environment for build

Spring Boot整合Spring MVC、Spring、Spring Data JPA(Hibernate)

一句话总结:Spring Boot不是新的功能框架,而是为了简化如SSH.SSM等等多个框架的搭建.整合及配置.使用Spring Boot 10分钟搭建起Spring MVC.Spring.Spring Data JPA(Hibernate)基础后台架构.基本零配置,全注解. 步骤一: 使用Spring Boot提供的网站生成maven项目及基础依赖.打开https://start.spring.io/网站,右侧输入想要的特性依赖.输入Web提供整合Spring MVC,输入JPA提供整合Spr

spring mvc表单的展现、输入处理、校验的实现

之前已经实现了spring mvc的入门例子及如何处理带参数的请求Controller编写.本文主要记录: 1)重定向请求 2)处理路径中含有变量的请求 3)使用JSR-303进行校验 ① 首先,编写一个方法实现一个表单的展现: //展示表单    //params 可限制该方法只对包含特定参数的请求进行处理    @RequestMapping(method=RequestMethod.GET,params="new")    public String createForm(Mod