springboot全局异常处理,干掉try catch。

编程入门 行业动态 更新时间:2024-10-09 13:32:37

springboot<a href=https://www.elefans.com/category/jswz/34/1765343.html style=全局异常处理,干掉try catch。"/>

springboot全局异常处理,干掉try catch。

写在前面

SpringBoot项目进行全局异常的处理是非常有必要的,不仅处理异常方便,而且可以优化代码,干掉try catch。本篇文章基于spring boot。

感谢.html

处理500异常

自定义基础接口类

public interface BaseErrorInfoInterface {/** 错误码*/int getResultCode();/** 错误描述*/String getResultMsg();
}

自定义枚举类

public enum CommonEnum implements BaseErrorInfoInterface {// 数据操作错误定义SUCCESS(200, "成功!"),BODY_NOT_MATCH(400,"请求的数据格式不符!"),SIGNATURE_NOT_MATCH(401,"请求的数字签名不匹配!"),NOT_FOUND(404, "未找到该资源!"),INTERNAL_SERVER_ERROR(500, "服务器内部错误!"),SERVER_BUSY(503,"服务器正忙,请稍后再试!");/** 错误码 */private int resultCode;/** 错误描述 */private String resultMsg;CommonEnum(int resultCode, String resultMsg) {this.resultCode = resultCode;this.resultMsg = resultMsg;}@Overridepublic int getResultCode() {return resultCode;}@Overridepublic String getResultMsg() {return resultMsg;}}

自定义异常类

public class BusinessException extends RuntimeException  {private static final long serialVersionUID = -4879677283847539655L;private int errorCode;private String errorMessage;private String exceptionMessage;private Exception exception;public BusinessException(String errorMessage) {super();this.errorMessage = errorMessage;}public BusinessException(int errorCode, String errorMessage) {super();this.errorCode = errorCode;this.errorMessage = errorMessage;}public BusinessException(int errorCode, String errorMessage, Exception exception) {super();this.errorCode = errorCode;this.errorMessage = errorMessage;this.exception = exception;}public BusinessException(String errorMessage, String exceptionMessage) {super();this.exceptionMessage = exceptionMessage;this.errorMessage = errorMessage;}public String getExceptionMessage() {return exceptionMessage;}public void setExceptionMessage(String exceptionMessage) {this.exceptionMessage = exceptionMessage;}public int getErrorCode() {return errorCode;}public void setErrorCode(int errorCode) {this.errorCode = errorCode;}public String getErrorMessage() {return errorMessage;}public void setErrorMessage(String errorMessage) {this.errorMessage = errorMessage;}public Exception getException() {return exception;}public void setException(Exception exception) {this.exception = exception;}public BusinessException(int errorCode, String errorMessage, String exceptionMessage) {super();this.errorCode = errorCode;this.errorMessage = errorMessage;this.exceptionMessage = exceptionMessage;}
}

自定义数据格式

public class Result {/*** 响应代码*/private int code;/*** 响应消息*/private String message;/*** 响应结果*/private Object result;public Result() {}public Result(BaseErrorInfoInterface errorInfo) {this.code = errorInfo.getResultCode();this.message = errorInfo.getResultMsg();}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getResult() {return result;}public void setResult(Object result) {this.result = result;}/*** 成功** @return*/public static Result success() {return success(null);}/*** 成功* @param data* @return*/public static Result success(Object data) {Result rb = new Result();rb.setCode(CommonEnum.SUCCESS.getResultCode());rb.setMessage(CommonEnum.SUCCESS.getResultMsg());rb.setResult(data);return rb;}/*** 失败*/public static Result error(BaseErrorInfoInterface errorInfo) {Result rb = new Result();rb.setCode(errorInfo.getResultCode());rb.setMessage(errorInfo.getResultMsg());rb.setResult(null);return rb;}/*** 失败*/public static Result error(int code, String message) {Result rb = new Result();rb.setCode(code);rb.setMessage(message);rb.setResult(null);return rb;}/*** 失败*/public static Result error(String message) {Result rb = new Result();rb.setCode(-1);rb.setMessage(message);rb.setResult(null);return rb;}@Overridepublic String toString() {return JSONObject.toJSONString(this);}}

自定义全局异常处理类


@ControllerAdvice
public class GlobalExceptionHandler {/*** 处理自定义的业务异常* @param req* @param e* @return*/@ExceptionHandler(value = BusinessException.class)@ResponseBodypublic Result bizExceptionHandler(HttpServletRequest req, BusinessException e){System.err.println("未知异常!原因是:"+e.getErrorMessage());return Result.error(e.getErrorCode(),e.getErrorMessage());}/*** 处理空指针的异常* @param req* @param e* @return*/@ExceptionHandler(value =NullPointerException.class)@ResponseBodypublic Result exceptionHandler(HttpServletRequest req, NullPointerException e){System.err.println("未知异常!原因是:"+e);return Result.error(CommonEnum.BODY_NOT_MATCH);}/*** 处理其他异常* @param req* @param e* @return*/@ExceptionHandler(value =Exception.class)@ResponseBodypublic Result exceptionHandler(HttpServletRequest req, Exception e){System.err.println("未知异常!原因是:"+e);return Result.error(CommonEnum.INTERNAL_SERVER_ERROR);}
}

控制层controller

@RestController
@RequestMapping
public class LoginController {@PostMapping("/hello")public boolean insert(Integer i) {System.out.println("开始...");//如果姓名为空就手动抛出一个自定义的异常!if(i==null){throw  new BusinessException(-1,"i不能为空!");}return true;}@PutMapping("/hello")public boolean update() {System.out.println("开始更新...");//这里故意造成一个空指针的异常,并且不进行处理String str=null;str.equals("111");return true;}@DeleteMapping("/hello")public boolean delete()  {System.out.println("开始删除...");//这里故意造成一个异常,并且不进行处理Integer.parseInt("abc123");return true;}
}

测试

处理404 

这里使用最有效的办法。

实现ErrorController

@RestController
public class ErrController implements ErrorController {@Overridepublic String getErrorPath() {// TODO Auto-generated method stubreturn "/error";}@RequestMapping("/error")public boolean handlerError() {throw new BusinessException(-1,"页面不存在");}}

测试

加入我们群

如果有需要,欢迎可以加入我们的QQ群!(QQ搜索 1074281704,加入我们的QQ群吧!)
有任何问题,也可以加入我们的QQ群,欢迎交(che)流(dan)!也欢迎参观我的博客www.aquestian!!

更多推荐

springboot全局异常处理,干掉try catch。

本文发布于:2024-02-13 18:22:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759483.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:全局   异常   springboot   catch

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!