SpringMvc中,校驗參數可以使用 @Valid 注解,同時在相應的對象里使用
@NotBlank( message = "昵稱不能為空")
@NotNull( message = "ID不能為空")
@Pattern(
message = "不能包括空格"
, regexp = "\\S+"
)
等等。
這個校驗會把所有的參數都校驗一遍,所以它的異常里會好些列表,直接使用e.getMessage(),會輸出很多累贅的東西
一個好的解決辦法
@Valid 注解校驗住的異常是 org.springframework.validation.BindException
所以可以添加一個異常攔截器,專門攔截,並且解析這種異常
具體如下:
package cn.jiashubing.config; import cn.jiashubing.result.ResultModel; import org.springframework.validation.BindException; import org.springframework.validation.ObjectError; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; /** * @author jiashubing * @since 2019/6/17 */ @ControllerAdvice public class BingExceptionHandler { @ExceptionHandler(BindException.class) @ResponseBody public ResultModel handleBindException(Exception e) { //打印校驗住的所有的錯誤信息 StringBuilder sb = new StringBuilder("參數錯誤:["); List<ObjectError> list = ((BindException) e).getAllErrors(); for (ObjectError item : list) { sb.append(item.getDefaultMessage()).append(','); } sb.deleteCharAt(sb.length() - 1); sb.append(']'); String msg = sb.toString(); return new ResultModel(false, msg); } }
原創文章,歡迎轉載,轉載請注明出處!