springboot表單提交之validator校驗

前言

表單提交是最常見的數據提交方式,我們經常會填寫表單信息,比如用戶名,身份證,手機號等等,因此就會產生身份證是否合法,用戶名是否為空,雖然我們可以直接在前臺使用js就進行格式的校驗,但如果使用postman工具直接發請求呢?使用我們後端也需要進行對數據的校驗,這樣極大的確保數據的安全性和合法性。

1.新建一個Springboot項目,並且添加web依賴。下面是本項目的全部依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.5.Final</version>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

在這裡插入圖片描述

2.為瞭方便演示,我引入瞭Lombok,然後我們新建一個User類來模擬用戶註冊時提交的表單信息。

這裡涉及到幾個註解:

@NotEmpty(message=“用戶名不能為空”)
@Length(min=6,max = 12,message=“用戶名長度必須位於6到12之間”)
@Email(message=“請輸入正確的郵箱”)
@Pattern(regexp = “正則表達式”, message = “身份證格式錯誤”)

User.java的代碼:

package com.ctvit.validatordemo.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.io.Serializable;

/**
 * 用戶名,密碼,郵箱,身份證
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    @NotEmpty(message="用戶名不能為空")
    @Length(min=6,max = 12,message="用戶名長度必須位於6到12之間")
    private String userName;


    @NotEmpty(message="密碼不能為空")
    @Length(min=6,message="密碼長度不能小於6位")
    private String passWord;

    @Email(message="請輸入正確的郵箱")
    private String email;

    @Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message = "身份證格式錯誤")
    private String idCard;

}

3.然後書寫一個簡單的控制器來進行模擬訪問:

package com.ctvit.validatordemo.controller;

import com.ctvit.validatordemo.pojo.User;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

@RestController
public class UserController {

    @PostMapping("/Register")
    public String Register(@Valid User user, BindingResult bindingResult){//一個BindingResult對應一個@Valid註解的參數,用來表示校驗消息
        StringBuffer stringBuffer = new StringBuffer();//使用StringBuffer拼接錯誤信息,比如用戶名為空,長度等
        if(bindingResult.hasErrors()){//判讀是否攜帶錯誤信息
            List<ObjectError> list =bindingResult.getAllErrors();//獲取所有錯誤信息對象
            for (ObjectError objectError:list) {//遍歷對象,獲取錯誤的具體信息
                //將所有信息進行拼接
                stringBuffer.append(objectError.getDefaultMessage());
                stringBuffer.append("---");
            }
        }
        return stringBuffer!=null?stringBuffer.toString():"";//將錯誤信息返回
    }
}

4.這裡涉及到一個接口:BindingResult。

方法名 作用
hasErrors() 判斷當前參數是否符合
getAllErrors() 獲取錯誤信息對象
getDefaultMessage() 獲取錯誤信息

在這裡插入圖片描述
在這裡插入圖片描述

輸入一半正確的,一般錯誤的:

在這裡插入圖片描述

都正確的數據:

在這裡插入圖片描述

總結

到此這篇關於springboot表單提交之validator校驗的文章就介紹到這瞭,更多相關springboot validator校驗內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: