SpringMVC(十六)数据校验

一、什么是数据校验?

      这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。

      数据校验分为客户端校验和服务端校验

        客户端校验:js校验

        服务端校验:springmvc使用validation校验,struts2使用validation校验。都有自己的一套校验规则。

数据校验

第一步:引入依赖

<!--数据校验-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.3.1.Final</version>
        </dependency>

        <!--validation api-->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.0.0.GA</version>
        </dependency>

第二步:配置验证器在springmvc.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="demo18Validator"></context:component-scan>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置验证器-->
    <bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
    </bean>

    <!--注解驱动-->
    <mvc:annotation-driven validator="myValidator"></mvc:annotation-driven>

</beans>

第三步:使用注解驱动关联验证器

在这里要声明一个用户类

package demo18Validator.domain;

import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.*;
import java.util.Date;

/**
 * Created by mycom on 2018/3/31.
 */
public class UserInfo {
    @NotEmpty(message = "用户名不能为空")
    @Size(min = 6,max = 20,message = "用户名必须在{min}-{max}之间")
    private String username;
    @Max(value = 150,message = "年龄最大不能超过150")
    @Min(value=18,message = "年龄做小不能低于18")
    private Integer userage;
    @NotNull(message = "出生日期不能为空")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    @NotEmpty(message = "手机号码不能为空")
    @Pattern(regexp = "^1[3|5|7|8|9]\\d{9}$",message = "手机号格式不正确")
    private String userphone;
    @NotEmpty(message = "邮箱不能为空")
    @Pattern(regexp = "^\\[email protected]\\w+\\.\\w+$",message = "邮箱格式不正确")
    private String email;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getUserage() {
        return userage;
    }

    public void setUserage(Integer userage) {
        this.userage = userage;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getUserphone() {
        return userphone;
    }

    public void setUserphone(String userphone) {
        this.userphone = userphone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

第四步:写控制器类

package demo18Validator;

import demo18Validator.domain.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.validation.Valid;

/**
 * Created by mycom on 2018/3/31.
 */
@Controller
public class FirstController {
    @RequestMapping("/first")
    public String doFirst(@Valid UserInfo info, BindingResult br, Model model){
        //判断br中错误总数是否大于0,如果大于0那么在模型中至少有一个是验证错误的
        if(br.getErrorCount()>0){
            //模型验证失败,获取到那个属性验证失败了
            FieldError username = br.getFieldError("username");
            FieldError userage = br.getFieldError("userage");
            FieldError userphone = br.getFieldError("userphone");
            FieldError email = br.getFieldError("email");
            FieldError birthday = br.getFieldError("birthday");
            //如果usernamemsg不为空那么就是他验证失败,同理其他属性也是
            if(username!=null){
                //验证失败后,获得到失败的信息,并把它放入model中
                String usernamemsg = username.getDefaultMessage();
                model.addAttribute("usernamemsg",usernamemsg);
            }
            if(userage!=null){
                //验证失败后,获得到失败的信息,并把它放入model中
                String useragemsg = userage.getDefaultMessage();
                model.addAttribute("useragemsg",useragemsg);
            }
            if(userphone!=null){
                //验证失败后,获得到失败的信息,并把它放入model中
                String userphonemsg = userphone.getDefaultMessage();
                model.addAttribute("userphonemsg",userphonemsg);
            }
            if(email!=null){
                //验证失败后,获得到失败的信息,并把它放入model中
                String emailmsg = email.getDefaultMessage();
                model.addAttribute("emailmsg",emailmsg);
            }
            if(birthday!=null){
                //验证失败后,获得到失败的信息,并把它放入model中
                String birthdaymsg = birthday.getDefaultMessage();
                model.addAttribute("birthdaymsg",birthdaymsg);
            }
            /*验证失败后,仍然会到表单页面*/
            return "validator";
        }
        /*验证成功之后跳到成功页面*/
        return "success";
    }
}

页面上

<%--
  Created by IntelliJ IDEA.
  User: mycom
  Date: 2018/3/31
  Time: 17:19
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>数据校验</h1>
<form action="${pageContext.request.contextPath}/first" method="post">
    年龄:<input name="userage" /> <span>${useragemsg }</span><br/><br/>
    姓名:<input name="username"/><span>${usernamemsg }</span><br/><br/>
    电话:<input name="userphone"/><span>${userphonemsg }</span><br/><br/>
    出生日期:<input name="birthday"/> <span>${birthdaymsg}</span><br/><br/>
    邮箱:<input name="email"/> <span>${emailmsg}</span><br/><br/>
    <input type="submit" value="注册"/>
</form>

</body>
</html>

成功页面

<%--
  Created by IntelliJ IDEA.
  User: mycom
  Date: 2018/3/26
  Time: 11:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
登录成功!
</body>
</html>

原文地址:https://www.cnblogs.com/my-123/p/8684598.html

时间: 2024-08-30 08:30:09

SpringMVC(十六)数据校验的相关文章

SpringMVC中的数据校验

SpringMVC中的数据校验 这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层主要校验关键业务参数,仅限于service接口中使用的参数.这里主要总结一下何如使

【SpringMVC学习06】SpringMVC中的数据校验

这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层主要校验关键业务参数,仅限于service接口中使用的参数.这里主要总结一下何如使用springmvc中contr

SpringMVC(十六) 处理模型数据之SessionAttributes

@SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中. @SessionAttributes参数 1.names:这是一个字符串数组.里面应写需要存储到session中数据的名称. 2.types:根据指定参数的类型,将模型中对应类型的参数存储到session中  3

学习SpringMVC(十六)之数据绑定流程

1.SpringMVC主框架将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象 2.DataBinder调用装配在SpringMVC上下文中的ConversionService组件进行数据类型转换.数据格式化工作.将Servlet中的请求信息填充到入参对象中 3.调用Validator组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果. 4.SpringMVC抽取BindingRe

在SpringMVC中使用数据验证组件——hibernate-validator

在做web开发的时候,经常需要对客户端发送过来的数据进行一个验证,以防数据不合法.而SpringMVC支持的数据校验是JSR303的标准,通过在bean的属性上打上annotation @NotNull @Max等注解进行验证.JSR303提供有很多annotation借口,而SpringMVC对于这些验证是使用hibernate的实现,所以我们需要添加hibernate的一个validator包: <dependency> <groupId>org.hibernate</g

《Java从入门到放弃》入门篇:springMVC数据校验

昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. Spring的DataBinder在进行数据绑定时,会同时调用校验框架完成数据校验工作. 具体使用步骤如下: 1)导入数据校验的JAR包 2)在springmvc的配置文件中添加校验Bean 3)修改实体类,在属性上加上校验的注解 4)修改昨天的login4方法,加上校验的相关代码

Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——SpringMVC注解开发(基础篇) 本文主要内容: (1)SpringMVC校验 (2)数据回显 (3)异常处理器 (4)图片上传 (5)Json数据交互 (6)支持RESTful 1.SpringMVC校验 1.1校验理解 项目中,通常使用较多的是前端的校验,比如页面中js校验.对于安全要求较高的

SpringMVC——类型转换和格式化、数据校验、客户端显示错误消息

在介绍类型转换和格式化之前,我首先来介绍 <mvc:annotation-driven />. 需要导入的 schema: xmlns:mvc="http://www.springframework.org/schema/mvc" 一.作用: 1.会自动注册 RequestMappingHandlerMapping.RequestMappingHandlerAdapter 以及 ExceptionHandlerExceptionResolver 三个 Bean. 若配置该注

SpringMVC数据校验

一.数据校验 在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Java代码进行验证. 为了保证数据的安全性,一般情况下,客户端和服务器端验证都是必须的 二.关键步骤: ①.导入JAR包 SpringMVC支持JSR(Java Specification Result,Java规范提案)303-Bean Validation数据验证规范.而该规范的实现者