Get請求使用注解校驗失敗


前言

今天在get請求上使用注解進行參數校驗,怎么樣都校驗不到,把解決過程記錄一下。

正文

解決方法 :

  1. 在類上面增加 @Validated 注解
  2. 修改方法訪問權限為 public (我就栽在這里了,之前的接口在接手的時候使用的private修飾的)

這時就可以正常使用@NotNull 等各種校驗注解了。

其它

需要注意的是這里校驗失敗時對外拋錯是ConstraintViolationException(post請求對實體進行校驗的拋錯是MethodArgumentNotValidException)。
所以需要我們對兩個拋錯都進行處理。

   /**
     * 處理參數校驗異常
     * @param e
     * @return
     */
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public CustomizeResponse exception(MethodArgumentNotValidException e) {
        logger.error(e.getMessage(), e);

        CustomizeResponse result = new CustomizeResponse();
        //result.setCode("");
        if(null != e.getBindingResult() && null != e.getBindingResult().getAllErrors() && !(e.getBindingResult().getAllErrors().isEmpty())){
            String errorMsg = e.getBindingResult().getAllErrors()
                    .stream()
                    .map(objectError -> ((FieldError)objectError).getField() + ((FieldError)objectError).getDefaultMessage())
                    .collect(Collectors.joining(","));
            if(null != errorMsg && !"".equals(errorMsg)){
                result.setMessage(errorMsg);
            }
        }

        return result;
    }

    /**
     * 處理參數校驗異常(這個是處理方法校驗的,用於get請求校驗)
     * @param e
     * @return
     */
    @ExceptionHandler({ConstraintViolationException.class})
    public CustomizeResponse validateException(ConstraintViolationException e) {
        logger.error(e.getMessage(), e);

        CustomizeResponse result = new CustomizeResponse();
        //result.setCode("");
        if(null != e.getConstraintViolations() && !e.getConstraintViolations().isEmpty()){
            String errorMsg = e.getConstraintViolations()
                    .stream()
                    .map(objectError -> objectError.getMessage())
                    .collect(Collectors.joining(","));
            if(null != errorMsg && !"".equals(errorMsg)){
                result.setMessage(errorMsg);
            }
        }

        return result;
    }


免責聲明!

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



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