1. 程式人生 > 其它 >SpringBoot中引數驗證的使用

SpringBoot中引數驗證的使用

spring boot中可以用@Validated來校驗資料,如果資料異常則會統一丟擲異常,方便異常中心統一處理。

註解引數說明

註解名稱 功能
@Xss 檢查該欄位是否存在跨站指令碼工具
@Null 檢查該欄位為空
@NotNull 不能為null
@NotBlank 不能為空,常用於檢查空字串
@NotEmpty 不能為空,多用於檢測list是否size是0
@Max 該欄位的值只能小於或等於該值
@Min 該欄位的值只能大於或等於該值
@Past 檢查該欄位的日期是在過去
@Future 檢查該欄位的日期是否是屬於將來的日期
@Email 檢查是否是一個有效的email地址
@Pattern(regex=,flag=) 被註釋的元素必須符合指定的正則表示式
@Range(min=,max=,message=) 被註釋的元素必須在合適的範圍內
@Size(min=, max=) 檢查該欄位的size是否在min和max之間,可以是字串、陣列、集合、Map等
@Length(min=,max=) 檢查所屬的欄位的長度是否在min和max之間,只能用於字串
@AssertTrue 用於boolean欄位,該欄位只能為true
@AssertFalse 該欄位的值只能為false

資料校驗使用

1、基礎使用 因為spring boot已經引入了基礎包,所以直接使用就可以了。首先在controller

上宣告@Validated需要對資料進行校驗。

 

 2、然後在對應欄位Get方法加上引數校驗註解,如果不符合驗證要求,則會以message的資訊為準,返回給前端。

 

 

自定義註解校驗

使用原生的@Validated進行引數校驗時,都是特定的註解去校驗(例如欄位長度、大小、不為空等),我們也可以用自定義的註解去進行校驗,例如專案中的@Xss註解。

1、新增Xss註解,設定自定義校驗器XssValidator.class

/**
 * 自定義xss校驗註解
 * 
 * @author ruoyi
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER })
@Constraint(validatedBy = { XssValidator.class })
public @interface Xss
{
    String message()

    default "不允許任何指令碼執行";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

2、自定義Xss校驗器,實現ConstraintValidator介面。

/**
 * 自定義xss校驗註解實現
 * 
 * @author ruoyi
 */
public class XssValidator implements ConstraintValidator<Xss, String>
{
    private final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />";

    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)
    {
        return !containsHtml(value);
    }

    public boolean containsHtml(String value)
    {
        Pattern pattern = Pattern.compile(HTML_PATTERN);
        Matcher matcher = pattern.matcher(value);
        return matcher.matches();
    }
}

3、實體類使用自定義的@Xss註解

@Xss(message = "登入賬號不能包含指令碼字元")
@NotBlank(message = "登入賬號不能為空")
@Size(min = 0, max = 30, message = "登入賬號長度不能超過30個字元")
public String getLoginName()
{
	return loginName;
}

 

 

此時在去儲存會進行驗證,如果不符合規則的字元(例如<script>alert(1);</script>)會提示登入賬號不能包含指令碼字元,代表限制成功。