SpringMVC JSR 303实现数据校验(表单注册DEMO)

该篇博客利用一个注册的Demo来详解JSR 303的数据校验

一、关于JSR303数据校验介绍

输入验证是Spring处理的最重要Web开发任务之一。在Spring MVC中,有两种方式可以验证输入,一是利用Spring自带的验证框架,二是利用本文所讲的JSR 303实现,如果你纠结于使用这两种中的哪一种,那么我建议你采用JSR 303,因为JSR 303是正式的Java规范,而且使用相对简单

当然JSR只是一个规范文档,本身用处不大,除非编写了它的实现。对于JSR bean validation目前有两个实现。第一个是实现Hibernate Validator(JSR 303和JSR 349都有它的实现),二是实现Apache BVal(该实现相对于Hibernate Validator没那么稳定)


二、JSR 303约束和Hibernate Validator约束

JSR 303是标准的校验注解,Hibernate Validator也有自带的校验注解

这些注解约束,使用在实体类的成员变量中

1、JSR 303注解约束

这里写图片描述
这里写图片描述

2、Hibernate Validator注解约束

属性 描述
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串大小必须在指定范围内:@Length(min=6,max=18,message=”密码长度必须在6~18位”)
@NotEmpty 被注释的集合类上必须非空
@Range 被注释的元素必须在合适的范围内

介绍了这么多,下面就进入正题,一个注册的Demo,看看是如何进行数据校验

三、利用JSR 303数据校验实战

1、导入JAR包

这里写图片描述

以上JAR包的下载,我会放到文末的工程下载中

2、项目目录

这里写图片描述

3、User实体类

package linjie.springmvc.pojo;
/**
* @author 浅然    [email protected]
* @version 创建时间:2018年6月4日 上午7:59:41
* 用户实体类
*/

import java.io.Serializable;

import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

public class User implements Serializable{
    private static final long serialVersionUID = -8091594509781201303L;

    //@NotEmpty 用在集合类上面
    //@NotBlank 用在String上面
    //@NotNull  用在基本类型上
    @NotBlank(message="用户名不能为空")
    private String username;                                        //用户名
    @Length(min=6,max=18,message="密码长度必须在6~18位")
    private String password;                                        //用户密码
    @Email(message="邮箱格式不正确")
    private String email;                                           //用户邮箱
    @Pattern(regexp="[1][3|4|5|7|8][0-9]{9}",message="手机号码格式不正确")
    private String phone;                                           //用户电话

    public User() {}

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }
    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }
    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }
    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }
    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }
    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }
    /**
     * @return the phone
     */
    public String getPhone() {
        return phone;
    }
    /**
     * @param phone the phone to set
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "User [username=" + username + 
                ", password=" + password + ", email=" +
                email + ", phone=" + phone + "]";
    }
}

4、请求处理控制器

@Valid作用:当该对象的类中已经定义好了验证规则,利用@Valid在控制器的方法中指定对该对象进行验证

package linjie.springmvc.controller;

/**
* @author 浅然    [email protected]
* @version 创建时间:2018年6月4日 上午8:01:41
* 请求处理的控制器
*/

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import linjie.springmvc.pojo.User;

@Controller
@RequestMapping("/springmvc")
public class UserController {

    //创建用户对象存入model,进入regist.jsp
    @RequestMapping(value="/regist")
    public String Regist(Model model){
        User user = new User();
        model.addAttribute("user",user);
        return "regist";
    }

    //用户注册事件触发该控制器,判断是否有error信息
    //如果有则不进入success
    //没有则进入success
    //@Valid作用:当该对象的类中已经定义好了验证规则,利用@Valid在控制器的方法中指定对该对象进行验证
    //BindingResult:传入BindingResult对象,用于获取校验失败情况下的反馈信息
    @RequestMapping(value="/qianran")
    public String GoSuccess(@Valid @ModelAttribute User user,BindingResult bindingResult,
            Errors errors,Model model){
        if(errors.hasErrors()){
            FieldError fieldError = bindingResult.getFieldError();
            System.out.println("Code:"+fieldError.getCode()+", object:"+fieldError.getObjectName()
                    +", field:"+fieldError.getField());
            return "regist";
        }
        model.addAttribute("user",user);
        return "success";

    }
}

5、配置文件

web.xml

这里写图片描述

springmvc-servlet.xml

这里写图片描述

6、视图

regist.jsp

Errors对象中的错误消息,可以利用表单标签库的Errors标签显示在HTML页面中。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../resource/css/user.css">
<title>浅然-注册</title>
</head>
<body>
    <img src="../resource/images/qianran.jpg">
    <form:form commandName="user" action="qianran" method="post">
        <fieldset>
        <legend>用户注册</legend>
            用户名*:<form:input path="username"/><span><form:errors path="username" cssClass="error" /></span><br>
            密码*:<form:input path="password"/><span><form:errors path="password" cssClass="error"/></span><br>
            邮箱:<form:input path="email"/><span><form:errors path="email" cssClass="error"/></span><br>
            手机号*:<form:input path="phone"/><span><form:errors path="phone" cssClass="error"/></span><br>
            <input type="submit" value="注册">
        </fieldset>
    </form:form>
</body>
</html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>浅然-注册成功</title>
</head>
<body>
    <fieldset>
        <legend>注册成功</legend>
        用户名:${user.username }<br>
        密码:${user.password }<br>
        邮箱:${user.email }<br>
        手机号:${user.phone }<br>
    </fieldset>
</body>
</html>

输入地址:http://localhost:8080/Springmvc_JSR303/springmvc/regist
Demo演示
1、注册初始界面

这里写图片描述

2、直接点击注册,没有填任何信息(就会进行校验)

这里写图片描述

3、按照提示规则输入正确的表单格式,成功注册界面

这里写图片描述


工程下载(附JAR包)


参考

《SpringMVC学习指南》

发布了254 篇原创文章 · 获赞 695 · 访问量 117万+

猜你喜欢

转载自blog.csdn.net/w_linux/article/details/80585468
今日推荐