接上一篇jsr303参数校验,由于返回的数据提示很不友好(bindException),
需要定义全局异常拦截器,将信息友好的显示给用户
本文以处理登录为例
定义全局异常拦截器:继承自RuntimeException
GlobalExceptionHandler,java
import org.springframework.validation.BindException;
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result<String> exceptionHandler(HttpServletRequest request, Exception e){
//绑定异常是需要明确提示给用户的
if(e instanceof BindException){
BindException exception=(BindException) e;
List<ObjectError> errors=exception.getAllErrors();
String msg=errors.get(0).getDefaultMessage();//获取自错误信息
return Result.error(CodeMsg.SERVER_BIND_ERROR.fillArgs(msg));//将具体
错误信息设置到CodeMsg中返回
}
// 其余异常简单返回为服务器异常
return Result.error(CodeMsg.SERVER_ERROR);
}
}
由于之前的CodeMsg类,只接收code,msg参数构造CodeMsg对象,如果需要定制ErrorException的codeMsg,
需要接收一个异常内容的参数:
只需要添加一个生成异常CodeMsg对象的方法:CodeMsg fillArgs(Object ... args)
CodeMsg.java
public class CodeMsg {
private int code;
private String msg;
//通用异常
publ