SpringBoot使用validator校驗

dalaoyang發表於2018-05-01

在前臺表單驗證的時候,通常會校驗一些資料的可行性,比如是否為空,長度,身份證,郵箱等等,那麼這樣是否是安全的呢,答案是否定的。因為也可以通過模擬前臺請求等工具來直接提交到後臺,比如postman這樣的工具,那麼遇到這樣的問題怎麼辦呢,我們可以在後臺也做相應的校驗。

新建專案,因為本文會使用postman模擬前端請求,所以本文需要加入web依賴,pom檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>

	<groupId>com.dalaoyang</groupId>
	<artifactId>springboot_validator</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot_validator</name>
	<description>springboot_validator</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<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>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>
複製程式碼

建立一個demo類,說一下本文使用demo中校驗使用的註解:
@NotEmpty:非空
@Length:長度,最長或者最短
@Email:校驗email
@Pattern:使用正則校驗,本文使用的是身份證的正則
,程式碼如下:

package com.dalaoyang.entity;

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

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

/**
 * @author dalaoyang
 * @Description
 * @project springboot_learn
 * @package com.dalaoyang.entity
 * @email yangyang@dalaoyang.cn
 * @date 2018/5/1
 */
public class Demo 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;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getEmail() {
        return email;
    }

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

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

}
複製程式碼

建立一個TestDemoController,來測試本文的校驗,程式碼如下:

package com.dalaoyang.controller;

import com.dalaoyang.entity.Demo;
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;

/**
 * @author dalaoyang
 * @Description
 * @project springboot_learn
 * @package com.dalaoyang.controller
 * @email yangyang@dalaoyang.cn
 * @date 2018/5/1
 */
@RestController
public class TestDemoController {

    @PostMapping("/")
    public String testDemo(@Valid Demo demo,BindingResult bindingResult){
        StringBuffer stringBuffer = new StringBuffer();
        if(bindingResult.hasErrors()){
            List<ObjectError> list =bindingResult.getAllErrors();
            for (ObjectError objectError:list) {
                stringBuffer.append(objectError.getDefaultMessage());
                stringBuffer.append("---");
            }
        }
        return stringBuffer!=null?stringBuffer.toString():"";
    }
}
複製程式碼

啟動專案使用postman分別做了三次請求,第一次所有屬性都是隨便填寫的,如圖

SpringBoot使用validator校驗

第二次輸入正確的身份證和郵箱,使用者名稱和密碼為空,如圖

SpringBoot使用validator校驗

第三次全部輸入正確,如圖

SpringBoot使用validator校驗

本文只是使用的簡單的幾種校驗,Hibernate-validator還有很多種校驗的方法,大家可以參考這篇文章blog.csdn.net/xgblog/arti…

原始碼下載 :大老楊碼雲

個人網站:www.dalaoyang.cn

相關文章