SpringBoot--表單驗證


1、引入依賴

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

2、JSR-303 注解介紹

  這里只列舉了 javax.validation 包下的注解,同理在 spring-boot-starter-web 包中也存在 hibernate-validator 驗證包,里面包含了一些 javax.validation 沒有的注解,有興趣的可以看看

注解 說明
@NotNull 限制必須不為null
@NotEmpty 驗證注解的元素值不為 null 且不為空(字符串長度不為0、集合大小不為0)
@NotBlank 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同於@NotEmpty,@NotBlank只應用於字符串且在比較時會去除字符串的空格
@Pattern(value) 限制必須符合指定的正則表達式
@Size(max,min) 限制字符長度必須在 min 到 max 之間(也可以用在集合上)
@Email 驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式
@Max(value) 限制必須為一個不大於指定值的數字
@Min(value) 限制必須為一個不小於指定值的數字
@DecimalMax(value) 限制必須為一個不大於指定值的數字
@DecimalMin(value) 限制必須為一個不小於指定值的數字
@Null 限制只能為null(很少用)
@AssertFalse 限制必須為false (很少用)
@AssertTrue 限制必須為true (很少用)
@Past 限制必須是一個過去的日期
@Future 限制必須是一個將來的日期
@Digits(integer,fraction) 限制必須為一個小數,且整數部分的位數不能超過 integer,小數部分的位數不能超過 fraction (很少用)

3、添加驗證

  由於方法入參可以是基本數據類型,也可以是對象,因此驗證可以加在對象的屬性上,也可以直接在Controller入參上添加

  (1)在對象屬性上添加驗證

package com.example.demo.entity;

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

import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.util.Date;

@Data
public class UserValidated {

    @NotBlank(message = "username不允許為空")
    @Length(min = 4,max = 8,message = "username長度要在4-8之間")
    private String username;
    @Email(message = "郵箱格式不正確")
    private String email;
    @Max(value = 200,message = "年齡最大不能超過200")
    @Min(value = 10,message = "年齡最小不能小於10歲")
    private int age;
    private Date date;


}

  (2)Controller入參添加驗證

 
         
@Validated
@Controller
@RequestMapping("/test")
@Api(value = "SpringBoot測試接口2")
public class UserTestController2 {

@ResponseBody @PostMapping(value
="/validated") @ApiOperation(value="validated表單驗證測試") @ApiImplicitParams( {@ApiImplicitParam(paramType="query", name = "email", value = "郵箱", dataType = "String"), @ApiImplicitParam(paramType="query", name = "username", value = "用戶名", dataType = "String"), @ApiImplicitParam(paramType="query", name = "age", value = "年齡", dataType = "String")}) public String validated(@NotBlank(message = "username不允許為空") @Length(min = 4,max = 8,message = "username長度要在4-8之間") String username, @Email(message = "郵箱格式不正確")String email, @Max(value = 200,message = "年齡最大不能超過200") @Min(value = 10,message = "年齡最小不能小於10歲")int age){ return "OK"; }
}

  說明:無論是哪一種方式的驗證,Controller類上必須添加@Validated注解以打開驗證。

4、驗證

  

 5、驗證組

  實際開發中可能存在在有的場景需要驗證某一個字段,而在有的場景不需要驗證的情況,例如,一個對象的ID,在新增時,可以為空,但是在更新時,不允許為空,這種情況下就需要使用驗證組。將id單獨分一個驗證組來驗證。

  (1)定義分組驗證器

package com.example.demo.utils;

public class ValidGroups {
    public interface Update{

    }

    public interface Default{

    }
}

  (2)在實體類上使用驗證組

package com.example.demo.entity;

import com.example.demo.utils.ValidGroups;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;
import java.util.Date;

@Data
public class UserValidated2 {

    @NotBlank(message = "id不允許為空", groups = ValidGroups.Update.class)
    private String id;
    @NotBlank(message = "username不允許為空", groups = ValidGroups.Default.class)
    private String username;
    @NotBlank(message = "email不允許為空", groups = ValidGroups.Default.class)
    private String email;
    @NotNull(message = "age不允許為空",groups = ValidGroups.Default.class)
    private int age;

}

  (3)控制層

    @ResponseBody
    @PostMapping(value ="/validated4")
    @ApiOperation(value="validated表單驗證測試")
    public String validatedUpdate(@Validated(value = {ValidGroups.Update.class,ValidGroups.Default.class}) @ModelAttribute UserValidated2 user){
        return "OK";
    }

    @ResponseBody
    @PostMapping(value ="/validated5")
    @ApiOperation(value="validated表單驗證測試")
    public String validatedInsert(@Validated(value = ValidGroups.Default.class) @ModelAttribute UserValidated2 user){
        return "OK";
    }

  (4)測試

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM