springmvc使用@Valid和@ControllerAdvise實現請求參數校驗統一異常處理


@

目錄

    1.常見表單驗證注解

    限制 說明
    @Null 限制只能為null
    @NotNull 限制必須不為null
    @AssertTrue 限制必須為true
    @DecimalMax(value) 限制必須為一個不大於指定值的數字
    @DecimalMin(value) 限制必須為一個不小於指定值的數字
    @Digits(integer,fraction) 限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction
    @Future 限制必須是一個將來的日期
    @Max(value) 限制必須為一個不大於指定值的數字
    @Min(value) 限制必須為一個不小於指定值的數字
    @Past 限制必須是一個過去的日期
    @Pattern(value) 限制必須符合指定的正則表達式
    @Size(max,min) 限制字符長度必須在min到max之間
    @NotEmpty 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
    @NotBlank 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同於@NotEmpty,@NotBlank 只應用於字符串且在比較時會去除字符串的空格
    @Email 驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式

    2.代碼實現
    新建model其中兩個字段增加注解

    @NotBlank(message = "用戶名稱不能為空")
        @ApiModelProperty(value = "用戶名稱")
        private String userName;
    
        @Email(message = "請填寫正確的郵箱")
        @ApiModelProperty(value = "郵箱")
        private String email;
    

    Controller
    在需要校驗的model前增加@Valid 注解

     @RequestMapping(method = RequestMethod.POST)
    	    public String test(@Valid @RequestBody TestEntity model) {
    	        try {
    	            testEntityService.insert(model);
    	            return "";
    	        }catch (Exception e){
    	            return "";
    	        }
    	    }
    

    統一異常處理

    通過ControllerAdvice和@ExceptionHandler注解,在Controller中發生的異常錯誤就到指定異常處理方法進行處理。

    @ControllerAdvice
    	public class DoControllerAdvice {
    	    private static final Logger logger = LoggerFactory.getLogger(DoControllerAdvice.class);
    	
    	    /**
    	     * @param e
    	     * @return d1.framework.webapi.http.Result
    	     * @Description 必填校驗異常處理
    	     * @Date 2019-07-30
    	     */
    	    @ResponseBody
    	    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    	    public Result errorHandler(MethodArgumentNotValidException e) {
    	        String errorMsg = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
    	        logger.error("未處理異常", errorMsg);
    	        return ResultUtil.fail(errorMsg);
    	    }
    	}
    

    在這里插入圖片描述看一下MethodArgumentNotValidException這個類的源碼 ,它繼承了Exception,包含參數和錯誤。BindError參數實現了error。 統一異常處理類實現完成。


    免責聲明!

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



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