Javax.validation是spring集成自帶的一個參數校驗接口。可經過添加註解來設置校驗條件。git
下面以springboot項目爲例進行說明。建立web項目後,不須要再添加其餘的依賴;web
一、 被校驗參數spring
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 }
二、Controllerspringboot
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 }
三、啓動服務,而後在本地請求,若是請求參數不對,便可看到咱們給出的錯誤信息app
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會被看成有效處理;
一、定義註解ide
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()這三個方法必須要定義,其餘的就能夠本身增長了;spa
二、定義校驗方法;code
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 }