咱們有時須要對前端傳過來的數據作校驗,就能夠使用spring validation。他能夠使咱們不用在每一個Controller編寫校驗代碼,能夠達到解耦的功能。本文環境爲jdk8,框架使用springboot 2.1.0.RELEASE。前端
添加依賴java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
須要被校驗的實體類git
@Data public class LoginVo { @Size(min=6,max = 12,message = "用戶名不符合規範") String username; @NotBlank(message = "密碼不能爲空") String password; }
Controller層,在參數Login前加上@Validated註解,代表須要spring對其進行校驗正則表達式
public JSONResult registerOrLogin(@Validated LoginVo loginVo)
JSR提供的校驗註解: @Null 被註釋的元素必須爲 null @NotNull 被註釋的元素必須不爲 null @AssertTrue 被註釋的元素必須爲 true @AssertFalse 被註釋的元素必須爲 false @Min(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 @Max(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 @DecimalMin(value) 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 @DecimalMax(value) 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 @Size(max=, min=) 被註釋的元素的大小必須在指定的範圍內 @Digits (integer, fraction) 被註釋的元素必須是一個數字,其值必須在可接受的範圍內 @Past 被註釋的元素必須是一個過去的日期 @Future 被註釋的元素必須是一個未來的日期 @Pattern(regex=,flag=) 被註釋的元素必須符合指定的正則表達式 Hibernate Validator提供的校驗註解: @NotBlank(message =) 驗證字符串非null,且長度必須大於0 @Email 被註釋的元素必須是電子郵箱地址 @Length(min=,max=) 被註釋的字符串的大小必須在指定的範圍內 @NotEmpty 被註釋的字符串的必須非空 @Range(min=,max=,message=) 被註釋的元素必須在合適的範圍內
4.若是前端傳來的數值不符合標準,後端會報錯,因此咱們能夠編寫一個全局異常類來捕獲這個參數綁定異常,從而給前端返回提示消息spring
@ControllerAdvice @ResponseBody public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class)//攔截全部異常 public JSONResult exceptionHandler(HttpServletRequest request, Exception e){ e.printStackTrace(); if(e instanceof BindException) { BindException ex = (BindException)e; List<ObjectError> errors = ex.getAllErrors();//綁定錯誤返回不少錯誤,是一個錯誤列表,只須要第一個錯誤 ObjectError error = errors.get(0); String msg = error.getDefaultMessage(); return JSONResult.errorMsg("用戶名或密碼格式錯誤"); }else { return JSONResult.errorMsg("未知錯誤"); } } }
5.驗證
前端:
後端:
如圖,後端捕獲了異常,並向前端返回了提示信息
6.咱們還能夠使用分組功能,是變量在某些場景須要被驗證,而不是全部場景,增長靈活性。後端