使用jsr303規範驗證數據

咱們有時須要對前端傳過來的數據作校驗,就能夠使用spring validation。他能夠使咱們不用在每一個Controller編寫校驗代碼,能夠達到解耦的功能。本文環境爲jdk8,框架使用springboot 2.1.0.RELEASE。前端

  1. 添加依賴java

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
  2. 須要被校驗的實體類git

    @Data
    public class LoginVo {
    
        @Size(min=6,max = 12,message = "用戶名不符合規範")
        String username;
        @NotBlank(message = "密碼不能爲空")
        String password;
    }
  3. 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.咱們還能夠使用分組功能,是變量在某些場景須要被驗證,而不是全部場景,增長靈活性。後端

相關文章
相關標籤/搜索