Spring BeanValidation校驗@RequestParam參數

記錄是一種精神,是加深理解最好的方式之一。
曹金桂 cao_jingui@163.com(如有遺漏請指教)
時間:2017年02月27日

概述

我們知道,Spring BeanValidation可以用來校驗我們客戶的提交的參數對應的Bean對象。但是在很多情況,我們的參數只有一個簡單字符串或者是數字型參數(采用@RequestParam注解),要想使用SpringValidation還需要把這簡單的參數包裝成對象,甚是麻煩。下面我們看下,怎么樣才能使@RequestParam注解的參數也可以使用Spring Validatio呢。

方案

  1. Spring容器注入MethodValidationPostProcessor對象
    <bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

注意:如果Sping配置文件和SpringMVC配置文件分別獨立,需要把這個配置加到SpringMVC配置中

  1. 使用@Validated注解
    在對應的Controller中加上@Validated注解,當然也可以加到獨立的請求方法中

  2. 使用校驗注解

@RestController
@Validated
public class TestController {

    @RequestMapping("/test")
    public String test(@NotBlank(message = "姓名不能為空") @RequestParam("name") String name) {
         // .....
         return ResponseVO.successWithNoData("ok");
     }
}
  1. 全局校驗異常捕捉
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleValidationException(ConstraintViolationException e){
        for(ConstraintViolation<?> s:e.getConstraintViolations()){
            return s.getInvalidValue()+": "+s.getMessage();
        }
        return "請求參數不合法";
    }
}

小結

以后再也不用對每個參數手寫代碼校驗了,省下時間回家陪妹子。

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

推薦閱讀更多精彩內容