springboot框架的全局异常处理方案详解
系统框架搭建的前期过程中,为了约束代码规范,我们会对一些通用功能做一些处理,比如声明一些系统公用错误类、封装通用返回结果、统一异常处理等,这样做的优势是团队开发过程中能够形成统一的代码规范,增强代码可读性,同时又便于后期代码维护。本文主要介绍下框架中异常的处理:
1.声明全局异常处理类,并添加@ControllerAdvice和@RestController注解
代码如下:
@ControllerAdvice
@RestController
publicclassGlobalExceptionHandler{
privatefinalLoggerlogger=Logger.getLogger(GlobalExceptionHandler.class);
//空指针异常
@ExceptionHandler(NullPointerException.class)
publicMapnullPointer(NullPointerExceptione,HttpServletRequestreq){
logger.error(e.getMessage());
e.printStackTrace();
returnResultObject.newResultObj(ErrorCode.NULLPOINTER);
}
//IO异常
@ExceptionHandler(IOException.class,HttpServletRequestreq,HttpServletResponseres)
publicMapIOException(IOExceptione){
logger.error(e.getMessage());
e.printStackTrace();
returnResultObject.newResultObj(ErrorCode.IOEXCEPTION);
}
//权限不足异常
@ExceptionHandler(UnauthorizedException.class)
publicMapunauth(HttpServletRequestreq,HttpServletResponseres){
returnResultObject.newResultObj(ErrorCode.UNAUTH);
}
//未登录异常
@ExceptionHandler(AuthorizationException.class)
publicMapunlogin(HttpServletRequestreq,HttpServletResponseres){
returnResultObject.newResultObj(ErrorCode.NOTLOGIN);
}
//其它异常
@ExceptionHandler(Exception.class)
publicMaperror(Exceptione,HttpServletRequestreq,HttpServletResponseres){
logger.error(e.getMessage());
e.printStackTrace();
returnResultObject.newResultObj(ErrorCode.SYSTEM);
}
}
2.声明系统通用错误处理类
/**
*系统通用错误处理类
*/
publicclassErrorCode{
//返回码
privateintcode=0;
//描述信息
privateStringerrmsg="SUCCESS";
//成功
publicstaticfinalErrorCodeSUCCESS =newErrorCode(0,"SUCCESS");
publicstaticfinalErrorCodePARAMS =newErrorCode(100000,"参数错误");
publicstaticfinalErrorCodeSYSTEM =newErrorCode(100001,"系统错误");
publicstaticfinalErrorCodeUNLOGIN =newErrorCode(100002,"未登录");
publicstaticfinalErrorCodeUNAUTH =newErrorCode(100003,"权限错误");
publicstaticfinalErrorCodeNULLPOINTER =newErrorCode(100004,"空指针错误");
publicstaticfinalErrorCodeIOEXCEPTION =newErrorCode(100005,"IO错误");
publicstaticfinalErrorCodeUPLOAD_FAIL =newErrorCode(100006,"文件上传失败");
publicstaticfinalErrorCodeREPEAT =newErrorCode(100007,"数据已存在");
publicErrorCode(){}
@Override
publicStringtoString(){
returnString.format("{\"errmsg\":\"%s\",\"code\":%d}",errmsg,code);
}
publicintgetCode(){
returncode;
}
publicErrorCodesetCode(intcode){
this.code=code;
returnthis;
}
publicStringgetErrmsg(){
returnerrmsg;
}
publicErrorCodesetErrmsg(Stringerrmsg){
this.errmsg=errmsg;
returnthis;
}
publicErrorCode(intcode,Stringerrmsg){
this.code=code;
this.errmsg=errmsg;
}
}
3.声明全局异常处理类中的结果返回类
importjava.util.HashMap;
importjava.util.Map;
importjavax.servlet.http.HttpServletResponse;
importcom.xxx.ErrorCode;//此处引用自己errorCode类所在的包路径
importorg.json.JSONObject;
publicclassResultObject{
/**
*输出错误信息
*@paramerrorCode
*/
publicstaticMapnewResultObj(ErrorCodeerrorCode){
Mapobj=newHashMap();
obj.put("code",errorCode.getCode());
obj.put("errmsg",errorCode.getErrmsg());
returnobj;
}
/**
*输出带数据的成功信息
*@paramdata
*/
publicstaticMapnewResultObj(Objectdata){
Mapobj=newHashMap();
obj.put("code",ErrorCode.SUCCESS.getCode());
obj.put("errmsg",ErrorCode.SUCCESS.getErrmsg());
if(null!=data){
obj.put("data",data);
}
returnobj;
}
/**
*输出带数据的错误信息
*@paramerrorCode
*@paramdata
*/
publicstaticMapnewResultObj(ErrorCodeerrorCode,Objectdata){
Mapobj=newHashMap();
obj.put("code",errorCode.getCode());
obj.put("errmsg",errorCode.getErrmsg());
if(null!=data){
obj.put("data",data);
}
returnobj;
}
/**
*输出结果
*/
publicstaticvoidoutputResult(HttpServletResponseresponse,ErrorCodeerrorCode){
try{
JSONObjectjson=newJSONObject();
json.put("code",errorCode.getCode());
json.put("errmsg",errorCode.getErrmsg());
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(json.toString());
}catch(Exceptione1){
}
}
}
到此这篇关于springboot框架的全局异常处理方案的文章就介绍到这了,更多相关springboot全局异常处理内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。