SpringMvc的 @Valid 攔截到的異常如何拋出


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);
    }

}

 

原創文章,歡迎轉載,轉載請注明出處!

 


免責聲明!

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



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