Java web服務端參數校驗Javax.validation (springboot)


一、基本使用

       Javax.validation是spring集成自帶的一個參數校驗接口。可通過添加注解來設置校驗條件。

下面以springboot項目為例進行說明。創建web項目后,不需要再添加其他的依賴;

1、 被校驗參數

1 public class User {
2 private Long id; 3 @NotBlank(message = "用戶名不能為空") 4 private String name; 5 @NotBlank(message = "手機號不能為空") 6 private String phone; 7 @NotNull(message = "年齡不能為空") 8 private Integer age; 9 }

2、Controller

 1 @RestController
 2 public class TestController {
 3 
 4     @RequestMapping("/create")
 5     public String createUser(@Valid User user, BindingResult bindingResult){
 6         if (bindingResult.hasErrors()){
 7             return bindingResult.getFieldError().getDefaultMessage();
 8         }
 9         return  "success";
10     }
11 }

3、啟動服務,然后在本地請求,如果請求參數不對,即可看到我們給出的錯誤信息

 

 

 

二、所有原生可用的注解

 1 @NotBlank            元素不能為null,且不能全是空格,用於校驗字符串;
 2 @NotEmpty            元素不能為null,且不能為空,用於校驗集合類型數據;
 3 @NotNull             元素不能為null,所有類型的數據都可以校驗;
 4 @Null                元素必須為null, 所有類型的數據都可以校驗;
 5 @Size(min = 1, max = 5)    元素長度介於給定值之前(包含邊界),用於校驗集合類型數據(包含字符串),;
 6 @Future               元素為時間,且是將來的時間;
 7 @FutureOrPresent          元素為時間,且是現在或將來的時間;
 8 @Past               元素為時間,且是已經過去的時間;
 9 @PastOrPresent          元素為時間,且是現在或已經過去的時間;
10 @Max(value = 2)         元素值不大於給定值value,可校驗所有Number類型數據(除了double和float);;
11 @Min(value = 1)         元素值不小於給定值value,可校驗所有Number類型數據(除了double和float);;
12 @Negative           元素值為負數,可校驗所有Number類型數據;;
13 @NegativeOrZero         元素值為負數或0,可校驗所有Number類型數據;;
14 @Positive          元素值為正數,可校驗所有Number類型數據;;
15 @PositiveOrZero        元素值為正數或0,可校驗所有Number類型數據;;
16 @DecimalMax(inclusive = true, value = "3.2")   元素值不大於給定值value, inclusive默認是true,可不填,可校驗所有Number類型數據(除了double和float);
17 @DecimalMin(inclusive = false, value = "23")   元素值大於給定值value, inclusive默認是true,可不填,可校驗所有Number類型數據(除了double和float);
18 @Digits(integer = 5, fraction = 7)          元素為數字,且最大長度不超過7位,整數部分最高位不超過5位;
19 @AssertFalse               元素的值必須為false,用於校驗布爾類型元素;
20 @AssertTrue                元素的值必須為true,用於校驗布爾類型元素;
21 @Email                郵箱名格式校驗

注:除了前4個外,其他所有的null會被當作有效處理;

三、自定義校驗注解

1、定義注解

1 @Target({ElementType.FIELD, ElementType.METHOD})
2 @Retention(RetentionPolicy.RUNTIME)
3 @Constraint(validatedBy = NameValidator.class)
4 public @interface NameA {
5 
6     String message()  default "這個名字不是以a開頭";
7     Class<?>[] groups() default {};
8     Class<? extends Payload>[] payload() default {};
9 }

注意定義時message(),groups(),payload()這三個方法必需要定義,其他的就可以自己增加了;

2、定義校驗方法;

 1 public class NameValidator implements ConstraintValidator<NameA, String> {
 2 
 3     private String reg = "[a,]\\w+";
 4     private Pattern pattern = Pattern.compile(reg);
 5 
 6     @Override
 7     public void initialize(NameA name){
 8 
 9     }
10 
11     @Override
12     public boolean isValid(String name, ConstraintValidatorContext context){
13         if (name == null){
14             return  false;
15         }
16         return pattern.matcher(name).matches();
17     }
18 }

 


免責聲明!

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



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