在后端Controller層校驗前臺傳來的數據

一、引入依賴

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.2.Final</version>
        </dependency>

二、javaBean上設置校驗規則

@Data
@AllArgsConstructor
public class Student {
    @NotNull(message = "id不能為空")
    private Integer id;
    @NotNull(message = "姓名不能為空")
    private String name;
    @NotNull(message = "年齡不能為空")
    private Integer age;
}

三、Controller層返回校驗錯誤信息

將不符合校驗規則的字段錯誤信息,統一返回到前臺

@RestController
public class StudentController {

    @RequestMapping("/student")
    public String student(@Validated Student student, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            StringBuffer stringBuffer = new StringBuffer();

            for (ObjectError error : allErrors) {
                System.out.println(error.getDefaultMessage());
                stringBuffer.append(error.getDefaultMessage() + ";");
            }
            return stringBuffer.toString();
        }
        return student.toString();
    }
}

四、利用切面實現全局異常處理

使用全局異常處理之后,在JavaBean上增加異常判斷注解之后,只需要在Controller方法里增加@Valid即可

  • BindExceptionGlobalExceptionHandler
@ControllerAdvice
public class BindExceptionGlobalExceptionHandler {

    @ResponseBody
    @ExceptionHandler(BindException.class)
    public ResultBean validationErrorHandler(BindException e) throws JsonProcessingException {
        //1.此處先獲取BindingResult
        BindingResult bindingResult = e.getBindingResult();
        //2.獲取錯誤信息
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        System.out.println(allErrors);
        //3.組裝異常信息
        StringBuffer stringBuffer = new StringBuffer();
        for (ObjectError error : allErrors) {
            stringBuffer.append(error.getDefaultMessage() + ";");
        }
        //5.返回錯誤信息
        return new ResultBean(stringBuffer.toString(), 400);
    }
}
  • ResultBean
@Data
public class ResultBean {

    private String msg;
    private Integer code;

    public ResultBean(String msg, Integer code) {
        this.msg = msg;
        this.code = code;
    }

    public static ResultBean success(String msg, Integer code) {
        ResultBean jsonData = new ResultBean(msg, code);
        jsonData.msg = msg;
        return jsonData;
    }

}
image.png

五、常用校驗規則

  1. 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=) 被注釋的元素必須符合指定的正則表達式

  2. Hibernate Validator提供的校驗注解
    @NotBlank(message =) 驗證字符串非null,且長度必須大于0
    @Email 被注釋的元素必須是電子郵箱地址
    @Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內
    @NotEmpty 被注釋的字符串的必須非空
    @Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容