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>)會提示登錄賬號不能包含腳本字符,代表限制成功。

 

 

 

 


免責聲明!

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



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