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-09-21 06:16:12

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

求助一个spring mvc注解权限验证的问题

问题描述 求助一个spring mvc注解权限验证的问题 ![嘟嘟 解决方案 解决方案二: 解决方案三: 解决方案四: csdn太慢了... 解决方案五: 怎么删除重复的楼层? 解决方案六: 怎么删除重复的楼层?

spring mvc使用jsr303验证的问题

问题描述 描述一下,就是如果接收的数据是多层的,也就是我ModelA类的属性ModelB也是一个对象,我传入的是ModelB中的属性,传入方式为ModelB.xxx,命令对象为ModelA,那么xxx属性上的验证将不起作用,不知道是我自己哪里没配置好还是spring mvc的验证不支持,求大神帮忙解答. 解决方案 A @Valid //加这个即可 B

Spring mvc微信开发验证URL超时

问题描述 微信提交URL到后台Java中得到正确的返回参数,但是还是URL超时求帮助求解救 解决方案

spring mvc开发公众号-spring mvc开发的微信公众号怎么设置验证时的URL

问题描述 spring mvc开发的微信公众号怎么设置验证时的URL 您好. 我想咨询一下用spring mvc开发的微信公众号,在填写服务器配置时的url时应该写哪些?我的项目名是:weixinGo RequestMapping是valid.do 解决方案 就写上域名/valid.do就行,然后把你这个应用的token写上,在把剩下的填完就行了 解决方案二: http://域名/valid.do/? 这样吗?

Spring MVC 详解

第一章 Web MVC简介Web MVC简介 1.1.Web开发中的请求-响应模型:   在Web世界里,具体步骤如下: 1.  Web浏览器(如IE)发起请求,如访问http://sishuok.com 2.  Web服务器(如Tomcat)接收请求,处理请求(比如用户新增,则将把用户保存一下),最后产生响应(一般为html). 3.web服务器处理完成后,返回内容给web客户端(一般就是我们的浏览器),客户端对接收的内容进行处理(如web浏览器将会对接收到的html内容进行渲染以展示给客户)

深入整体分析Spring MVC framework

在当今的MVC framework里,似乎Webwork2逐渐成为主流, Webwork2+SpringFramework的组合变得越来越流行.这似乎意味着Spring自带的MVC framework远比Webwork2差,所以大家纷纷用Webwork2来代替.确实,Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象.很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀. 下面列举一下Sp

深入Spring MVC framework之总体分析

在当今的MVC framework里,似乎Webwork2逐渐成为主流, Webwork2+SpringFramework的组合变得越来越流行.这似乎意味着Spring自带的MVC framework远比Webwork2差,所以大家纷纷用Webwork2来代替.确实,Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象.很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀. 下面列举一下Sp

Apache Geronimo和Spring框架,第5部分: Spring MVC

简介:Spring Model-View-Controller(MVC)是 Spring 框架中应用最广泛的模块.它基于一种干净 的设计,并提供了很多开箱即用的类.本教程是系列教程(共六部分)的第五部分,通过向电话本示例应 用程序中添加更多功能详细介绍了 Spring MVC.在此过程中,您将了解如何利用丰富的 Spring MVC API 集中的有用类,如何定义易于理解的控制器来处理 JavaServer Page(JSP)的操作,如何扩展和 使用由 Spring MVC 提供的数据验证类等等

史上最强Spring mvc入门

一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!--configure the setting of springmvcDispatcherServlet and configure the mapping--> <servlet>     <servlet-name>