全局异常处理这里主要用到 @ControllerAdvice
1.自定义异常处理类
import lombok.Data;
/**
* @Description: 自定义异常
*/
@Data
public class CommonException extends RuntimeException {
public CommonException(int code, String msg) {
this.code = code;
this.msg = msg;
}
private int code;
private String msg;
}
注意:这里省略了setter/getter,使用了lombok 插件@Data注解,这里不再赘述。
2.全局异常处理类
@Slf4j
@RestControllerAdvice
public class CommonExceptionHandler {
/**
* 全局异常捕捉处理
* @param ex
* @return
*/
@ExceptionHandler(value = Exception.class)
public Map errorHandler(HttpServletRequest req,Exception ex) {
Map map = new HashMap();
map.put("code", 100);
map.put("message", ex.getMessage());
map.put("url", req.getRequestURL());
map.put("params", req.getParameterMap());
log.error("发生未处理的异常={}",ex.getMessage(),ex);
return map;
}
/**
* 拦截捕捉自定义异常 MyException.class
* @param ex
* @return
*/
@ExceptionHandler(value = CommonException.class)
public Map myErrorHandler(HttpServletRequest req, CommonException ex) {
Map map = new HashMap();
map.put("code", ex.getCode());
map.put("message", ex.getMsg());
map.put("url", req.getRequestURL());
map.put("params", req.getParameterMap());
return map;
}
}
3.controller
@RequestMapping(value = "/login",method = RequestMethod.POST)
public UserBase login(@RequestParam String account) {
UserBase result = null;
try {
result = userBaseService.userLogin(account);
} catch (Exception e) {
log.error("用户登录异常={}",e.getMessage(),e);
throw new CommonException(500,"内部错误");
}
return result ;
}
4.测试
请求:get方式:http://localhost:18080/userBase/login?account=111111
返回:{
"code": 100,
"message": "Request method 'GET' not supported",
"params": {
"account": [
"111111"
]
},
"url": "http://localhost:18080/userBase/login"
}
表明是全局异常捕获:errorHandler方法执行.
关掉数据库,制造异常采用 post 请求
返回:{
"code": 500,
"message": "内部异常",
"params": {
"account": [
"18612908620"
]
},
"url": "http://localhost:18080/userBase/login"
}
表明自定义异常捕获成功!
附:logback.xml 异常按级别输出到文件
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] --%mdc{client}%msg%n
${PATH}/info.log
logs/info.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n
INFO
ACCEPT
DENY
${PATH}/debug.log
logs/debug.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n
DEBUG
ACCEPT
DENY
${PATH}/warn.log
logs/warn.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n
WARN
ACCEPT
DENY
${PATH}/error.log
logs/error.%d{yyyy-MM-dd}.log
[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line]--%mdc{client} %msg%n
ERROR
ACCEPT
DENY