Java框架_SpringBoot服务端表单数据校验

一、实现添加用户功能

1 创建项目

2 修改POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>1.5.10.RELEASE</version>

    </parent>

    <groupId>com.bjsxt</groupId>

    <artifactId>13-spring-boot-validate</artifactId>

    <version>0.0.1-SNAPSHOT</version>

 

    <properties>

        <java.version>1.7</java.version>

        <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>

        <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>

    </properties>

 

    <dependencies>

        <!-- springBoot的启动器 -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <!-- thymeleaf的启动器 -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-thymeleaf</artifactId>

        </dependency>

    </dependencies>

</project>

 

3         编写添加用户功能

3.1     创建实体类

publicclass Users {

    private String name;

    private String password;

    private Integer age;

    public String getName() {

        returnname;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password = password;

    }

    public Integer getAge() {

        returnage;

    }

    publicvoid setAge(Integer age) {

        this.age = age;

    }

    @Override

    public String toString() {

        return"Users [name=" + name + ", password=" + password + ", age=" + age + "]";

    }

   

}

 

 

3.2     编写Controller

/**

 * SpringBoot 表单数据校验

 *

 *

 */

@Controller

publicclass UsersController {

 

    @RequestMapping("/addUser")

    public String showPage(){

        return"add";

    }

   

    /**

     * 完成用户添加

     */

    @RequestMapping("/save")

    public String saveUser(Users users){

        System.out.println(users);

        return"ok";

    }

}

 

 

3.3     编写页面add.html  ok.html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>添加用户</title>

</head>

<body>

    <form th:action="@{/save}" method="post">

        用户姓名:<input type="text" name="name"/><br/>

        用户密码:<input type="password" name="password" /><br/>

        用户年龄:<input type="text" name="age" /><br/>

        <input type="submit" value="OK"/>

    </form>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>操作成功</title>

</head>

<body>

    OK。。。。

</body>

</html>

 

 

二、         SpringBoot对表单做数据校验

1         SpringBoot对表单数据校验的技术特点

1.1     SpringBoot中使用了Hibernate-validate校验框架

2         SpringBoot表单数据校验步骤

2.1     在实体类中添加校验规则

publicclass Users {

    @NotBlank//非空校验

    private String name;

    @NotBlank//密码非空校验

    private String password;

    private Integer age;

    public String getName() {

        returnname;

    }

    publicvoid setName(String name) {

        this.name = name;

    }

    public String getPassword() {

        returnpassword;

    }

    publicvoid setPassword(String password) {

        this.password = password;

    }

    public Integer getAge() {

        returnage;

    }

    publicvoid setAge(Integer age) {

        this.age = age;

    }

    @Override

    public String toString() {

        return"Users [name=" + name + ", password=" + password + ", age=" + age + "]";

    }

   

}

 

2.2     在Controller中开启校验

/**

     * 完成用户添加

     *@Valid开启对Users对象的数据校验

     *BindingResult:封装了校验的结果

     */

    @RequestMapping("/save")

    public String saveUser(@Valid Users users,BindingResult result){

        if(result.hasErrors()){

            return"add";

        }

        System.out.println(users);

        return"ok";

    }

2.3     在页面中获取提示信息

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>添加用户</title>

</head>

<body>

    <form th:action="@{/save}" method="post">

        用户姓名:<input type="text" name="name"/><font color="red" th:errors="${users.name}"></font><br/>

        用户密码:<input type="password" name="password" /><font color="red" th:errors="${users.password}"></font><br/>

        用户年龄:<input type="text" name="age" /><font color="red" th:errors="${users.age}"></font><br/>

        <input type="submit" value="OK"/>

    </form>

</body>

</html>

2.4     遇到异常

 

三、         解决数据校验时的异常问题

解决异常的方法,在跳转页面的方法中注入一个对象,来解决问题。要求参数对象的变量名必须是对象的类名的全称首字母小写。

 

代码

/**

     * 解决异常的方式。可以在跳转页面的方法中注入一个Uesrs对象。

     * 注意:由于springmvc会将该对象放入到Model中传递。key的名称会使用该对象的驼峰式的命名规则来作为key。

     * 参数的变量名需要与对象的名称相同。将首字母小写。

     *

     * @param users

     * @return

     */

    @RequestMapping("/addUser")

    public String showPage( Users users){

        return"add";

    }

/**

     * 完成用户添加

     *@Valid开启对Users对象的数据校验

     *BindingResult:封装了校验的结果

     */

    @RequestMapping("/save")

    public String saveUser( @Valid Users users,BindingResult result){

        if(result.hasErrors()){

            return"add";

        }

        System.out.println(users);

        return"ok";

    }

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>添加用户</title>

</head>

<body>

    <form th:action="@{/save}" method="post">

        用户姓名:<input type="text" name="name"/><font color="red" th:errors="${users.name}"></font><br/>

        用户密码:<input type="password" name="password" /><font color="red" th:errors="${users.password}"></font><br/>

        用户年龄:<input type="text" name="age" /><font color="red" th:errors="${users.age}"></font><br/>

        <input type="submit" value="OK"/>

    </form>

</body>

</html>

 

如果参数的名称需要做改变

 

    /**

     *

     * 如果想为传递的对象更改名称,可以使用@ModelAttribute("aa")这表示当前传递的对象的key为aa

     * 那么我们在页面中获取该对象的key也需要修改为aa

     * @param users

     * @return

     */

    @RequestMapping("/addUser")

    public String showPage(@ModelAttribute("aa") Users users){

        return"add";

    }

/**

     * 完成用户添加

     *@Valid开启对Users对象的数据校验

     *BindingResult:封装了校验的结果

     */

    @RequestMapping("/save")

    public String saveUser(@ModelAttribute("aa") @Valid Users users,BindingResult result){

        if(result.hasErrors()){

            return"add";

        }

        System.out.println(users);

        return"ok";

    }

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>添加用户</title>

</head>

<body>

    <form th:action="@{/save}" method="post">

        用户姓名:<input type="text" name="name"/><font color="red" th:errors="${aa.name}"></font><br/>

        用户密码:<input type="password" name="password" /><font color="red" th:errors="${aa.password}"></font><br/>

        用户年龄:<input type="text" name="age" /><font color="red" th:errors="${aa.age}"></font><br/>

        <input type="submit" value="OK"/>

    </form>

</body>

</html>

 

四、         其他校验规则

@AssertTrue用于boolean字段,该字段只能为true  
@AssertFalse该字段的值只能为false
@CreditCardNumber对信用卡号进行一个大致的验证
@DecimalMax只能小于或等于该值
@DecimalMin只能大于或等于该值
@Digits(integer=,fraction=)检查是否是一种数字的整数、分数,小数位数的数字
@Email检查是否是一个有效的email地址
@Future检查该字段的日期是否是属于将来的日期
@Length(min=,max=)检查所属的字段的长度是否在min和max之间,只能用于字符串
@Max该字段的值只能小于或等于该值
@Min该字段的值只能大于或等于该值
@NotNull不能为null
@NotBlank不能为空,检查时会将空格忽略
@NotEmpty不能为空,这里的空是指空字符串
@Null检查该字段为空
@Past检查该字段的日期是在过去
@Pattern(regex=,flag=)被注释的元素必须符合指定的正则表达式
@Range(min=,max=,message=)被注释的元素必须在合适的范围内
@Size(min=, max=)检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
@URL(protocol=,host,port)检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件
@Valid该注解主要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,这样在检查当前对象的同时也会检查该字段所引用的对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值