在我们做web系统的时候,难免会出现各种各样的异常,但是这种异常,不能直接显示在客户端,所以我们服务端就需要做统一处理,统一返回格式给客户端

这里用到了spring的两个注解:@ControllerAdvice---控制器增强和@ExceptionHandler ---异常处理

下面来看看具体的实现,建立一个类,加上@ControllerAdvice注解
/** * 统一异常处理类 */ @ControllerAdvice public class MyExceptionHandler { private
static Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class); /** *
参数解析失败异常处理 */ @ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class) @ResponseBody public
ResponseResult
handleHttpMessageNotReadableException(HttpMessageNotReadableException e,
HttpServletRequest request) { logger.error(request.getRequestURI() +
":参数解析失败",e); return new
ResponseResult(HttpStatus.BAD_REQUEST.value(),"参数解析失败"); } /** * 不支持当前请求方法异常处理
*/ @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) @ResponseBody
public ResponseResult
handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException
e, HttpServletRequest request) { logger.error(request.getRequestURI() +
":不支持当前请求方法",e); return new
ResponseResult(HttpStatus.METHOD_NOT_ALLOWED.value(),"不支持当前请求方法"); } /** *
项目运行异常处理 */ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
@ExceptionHandler(Exception.class) @ResponseBody public ResponseResult
handleException(Exception e, HttpServletRequest request) {
logger.error(request.getRequestURI() + ":服务运行异常",e); return new
ResponseResult(HttpStatus.INTERNAL_SERVER_ERROR.value(),"服务运行异常"); } /** *
自定义异常处理 */ @ResponseStatus(HttpStatus.OK) @ExceptionHandler(MyException.class)
@ResponseBody public ResponseResult handleException(MyException e,
HttpServletRequest request) { logger.error(request.getRequestURI() +
":自定义内部异常",e.getMsg()); return new ResponseResult(e.getCode(),e.getMsg()); } }
这里只是举例经常遇到的几个异常,具体的项目运行异常还可以细分,如空指针、类型转换异常、IO异常等

最后一个就是自定义异常处理
@Data public class MyException extends RuntimeException{ //错误吗 private Integer
code; //错误信息 private String msg; public MyException(Integer code, String msg) {
this.code = code; this.msg = msg; } }
下面来检验一下,统一处理异常是否生效

1.检验请求类型,我们用get请求方式去测试

2.检验服务器运行异常,我们故意在代码中写个异常来测试(应该抛出java.lang.ArithmeticException: / by zero)

3.检验自定义异常

总结:测试得出,异常都可以统一处理了

技术
©2019-2020 Toolsou All rights reserved,
java实现抢红包功能TP6验证器的使用示例及正确验证数据员工网上晒腾讯年终奖:每人100股公司股票 价值超6万元!QCustomPlot系列(5)-实时动态曲线连 CEO 都不香了?这些互联网大佬接连辞任"头孢就酒 说走就走"?危险!服用这些药物千万别喝酒Python+OpenCV人脸识别技术详解蚂蚁集团董事长井贤栋安抚员工:公司终究会上市的面试的时候突然遇到答不上的问题怎么办?关于keras使用fit_generator中遇到StopIteration