SpringBoot数据验证处理

2026-02-23 08:35:21

1、在之前的程序里面如果一旦出现了偶无之后就会出现一堆的大白板,这个白板会有一些错误信息(虽然这些错误信息你可能看不懂,但是这些错误信息依然要告诉用户)。在springboot里面针对于错误的处理一共提供有三种方式:数据验证的错误、错误页指派以及全局异常的处理。

数据验证

现在假设说要进行表单信息提交,肯定需要有一个表单,而后这个表单要将数据提交到VO类中,所以现在的基本实现如下:

1、建立一个Member类:

package com.gwolf.vo;

import java.util.Date;

public class Member implements java.io.Serializable{

    private String mid;

    private String name;

    private Integer age;

    private Date birthday;

    private Double salary;

    public String getMid() {

        return mid;

    }

    public void setMid(String mid) {

        this.mid = mid;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }

    public Date getBirthday() {

        return birthday;

    }

    public void setBirthday(Date birthday) {

        this.birthday = birthday;

    }

    @Override

    public String toString() {

        return "Member{" +

                "mid=" + mid +

                ", name='" + name + '\'' +

                ", age=" + age +

                ", birthday=" + birthday +

                ", salary=" + salary +

                '}';

    }

    public Double getSalary() {

        return salary;

    }

    public void setSalary(Double salary) {

        this.salary = salary;

    }

}

        <meta http-equiv="content-type" 

              content="text/html;charset=UTF-8" />

    </head>

<body>

       <form action="member_add" method="post">

        用户邮箱:<input type="text" name="mid" value="gwolf_2010@126.com"/><br />

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

        用户工资:<input type="text" name="salary" value="566555.3"/><br />

        用户生日:<input type="text" name="birthday" value="2010-10-10"/><br />

        <input type="submit" value="表单提交"/>

        <input type="submit" value="重置"/>

    </form>

</body>

</html>

SpringBoot数据验证处理

5、现在访问地址:http://localhost:8080/member_add_pre。

SpringBoot数据验证处理

6、此时的代码只是一个最为普通的处理操作,但是这个时候对于该程序也是存在有如下问题的。

1、如果某些数据没有输入,则内容为null,如果要进行严格控制,这些null不应该存在。

2、某些数据需要进行格式验证,例如:用户名应该是邮箱,这个信息应该进行邮箱验证。

所以现在如果要想进行这些验证,springboot里面有默认的支持,只不过这种支持未必是最好的,在springboot里面为了方便用户编写验证,专门提供有一个hibernate-validation.jar工具包,这个工具包是有hibernate开发框架提供的。

SpringBoot数据验证处理

7、如果要想进行验证,那么首先要解决的问题必须是错误的提示信息问题,而在springboot里面对于错误信息的保存,都要求其保存在ValidationMessages.properties文件里面,在“src/main/resouces”目录中建立此文件;

SpringBoot数据验证处理

8、一个表单就需要编写这么多的配置项, 那么如果要有几百个表单呢?这样的配置项太可怕了,所以最好的数据检测还是利用拦截器处理最合适。

修改Member.java程序类,追加验证的处理方式:

package com.gwolf.vo;

import org.hibernate.validator.constraints.Email;

import javax.validation.constraints.Digits;

import javax.validation.constraints.NotNull;

import java.util.Date;

public class Member implements java.io.Serializable{

    @NotNull(message = "{member.mid.notnul}")

    @Email(message = "{member.mid.email.error}")

    private String mid;

    private String name;

    @NotNull(message = "{member.age.notnull.error}")

    @Digits(message = "{member.age.digits.error}",integer = 3,fraction = 0)

    private Integer age;

    private Date birthday;

    private Double salary;

    public String getMid() {

        return mid;

    }

    public void setMid(String mid) {

        this.mid = mid;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }

    public Date getBirthday() {

        return birthday;

    }

    public void setBirthday(Date birthday) {

        this.birthday = birthday;

    }

    @Override

    public String toString() {

        return "Member{" +

                "mid=" + mid +

                ", name='" + name + '\'' +

                ", age=" + age +

                ", birthday=" + birthday +

                ", salary=" + salary +

                '}';

    }

    public Double getSalary() {

        return salary;

    }

    public void setSalary(Double salary) {

        this.salary = salary;

    }

}

SpringBoot数据验证处理

9、修改MemberController类中的add()方法来观察错误信息的显示:

package com.gwolf.controller;

import com.gwolf.util.controller.AbstractBaseController;

import com.gwolf.vo.Member;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.validation.BindingResult;

import org.springframework.validation.ObjectError;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.Valid;

import java.util.Iterator;

@Controller

public class MemberController extends AbstractBaseController{

    @RequestMapping(value="/member_add_pre", method = RequestMethod.GET)

    public String memberAddPre() {

        return "member_add";

    }

    @RequestMapping(value="/member_add", method = RequestMethod.POST)

    @ResponseBody

    public Object memberAdd(@Valid Member member, BindingResult result) {

       if(result.hasErrors()) {

           Iterator<ObjectError> iterator =  result.getAllErrors().iterator();

           while (iterator.hasNext()) {

               ObjectError objectError = iterator.next();

               System.out.println("[错误信息]" + objectError.getCode() + "," 

                       + objectError.getDefaultMessage());

           }

           

           return result.getAllErrors();

       } else {

           return member;

       }

    }

}

SpringBoot数据验证处理

猜你喜欢