C++ Qt全局异常处理器_SpringBoot中这样定义全局异常处理器Global Exception Handler

5abc4dda52f3a11c1a4854246c9008a8.png

在SpringBoot中,我们使用@ControllerAdvice注解定义全局异常处理器。详见下方代码块:


@ControllerAdvicepublic class GlobalExceptionHandler { private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(MissingServletRequestParameterException.class) @ResponseBody public GeneralResponse handleMissingServletRequestParameterException(MissingServletRequestParameterException e, HttpServletRequest request) { String message = "缺失请求参数" + e.getParameterName(); return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value(), e); } @ExceptionHandler(MethodArgumentTypeMismatchException.class) @ResponseBody public GeneralResponse handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) { String message = "请求参数" + e.getName() + "类型错误"; return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value(), e); } @ExceptionHandler(HttpMessageConversionException.class) @ResponseBody public GeneralResponse handleHttpMessageNotReadableException(HttpMessageConversionException e, HttpServletRequest request) { String message = "参数类型错误"; return ackTransfer(request, message, HttpStatus.BAD_REQUEST.value(), e); } /** * Default Exception Handler */ @ExceptionHandler(Exception.class) @ResponseBody public GeneralResponse handleException(Exception e, HttpServletRequest request) { return ackTransfer(request, e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value(), e, true); } private GeneralResponse ackTransfer(HttpServletRequest request, String message, int code, Exception e, boolean printStackTrace) { GeneralResponse response = AckTransfer.fail(message, code); if (printStackTrace) { logger.error(message, e); } else { logger.error(message); } return response; } /** * transfer ACK */ private GeneralResponse ackTransfer(HttpServletRequest request, String message, int code, Exception e) { return ackTransfer(request, message, code, e, false); }}

以上,就是全局异常处理器的大体结构。

@ExceptionHandler用于绑定我们自定义的异常类(或者说我们需要catch住并处理的异常类,异常类可以自定义)。例如:我们在项目中经常需要抛出一些业务异常,此处,我们定义通用业务异常类为CommonBusinessException.class。那么,应该往GlobalExceptionHandler类添加如下方法定义:

/** * 通用业务异常 */@ExceptionHandler(CommonBusinessException.class)@ResponseBodypublic Response handleCommonBusinessException(CommonBusinessException e, HttpServletRequest request) { return ackTransfer(request, e.getMessage(), e.getCode(), e);}

afd2dbc0811ffae7483b2c666ed99117.png

最后,附上GeneralResponse和AckTransfer的定义:


public class AckTransfer { private static final int EXCEPTION_CODE = 0; public static GeneralResponse fail(String message, int code) { return new GeneralResponse(message, code); } public static GeneralResponse fail(String message) { return new GeneralResponse(message, EXCEPTION_CODE); }}

public class GeneralResponse { private static final String SUCCESS = "success"; private static final String FAILED = "failed"; // 状态描述 private String status; // 具体响应内容 private Object data; // 提示信息描述 private String message; // 状态码 private int code; GeneralResponse(Object data) { this.status = SUCCESS; this.data = data; this.message = ""; this.code = 200; } GeneralResponse(String message, int code) { this.status = FAILED; this.data = null; this.message = message; this.code = code; } // Getter、Setter省略...}

236b727511c7a1b52ae8aa283a5d9161.png

不足之处,欢迎批评指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值