全局异常处理
按照上述写法,所有的Controller层方法均需要增加try-catch
逻辑,使用Spring MVC提供的全局异常处理功能,可以将所有处理异常的逻辑集中起来,进而统一处理所有异常,使代码更容易维护。
具体用法如下,详细信息可参考官方文档:
在common模块中创建com.atguigu.lease.common.exception.GlobalExceptionHandler
类,内容如下
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result error(Exception e){
e.printStackTrace();
return Result.fail();
}
}
上述代码中的关键注解的作用如下
@ControllerAdvice
用于声明处理全局Controller方法异常的类
@ExceptionHandler
用于声明处理异常的方法,value
属性用于声明该方法处理的异常类型
@ResponseBody
表示将方法的返回值作为HTTP的响应体
注意:
全局异常处理功能由SpringMVC提供,因此需要在common模块的pom.xml
中引入如下依赖
<!--spring-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
由于前文的GlobalExceptionHandler
会处理所有Controller方法抛出的异常,因此Controller层就无序关注异常的处理逻辑了,因此Controller层代码可做出如下调整。
public Result<String> upload(@RequestParam MultipartFile file) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
String url = service.upload(file);
return Result.ok(url);
}
推荐阅读:
尚硅谷尚庭公寓
在SpringMVC中接收枚举类型参数
Mybatis-Plus更新策略修改
《尚庭公寓》162集确认租约按钮没反应
慎用 rm -rf命令
RedistTemplate类型选择和使用
redis缓存一致性问题
阿里云短信验证码服务
SpringBoot方法启动新的线程异步执行的注解
xml文件`<`和`>`的转义
行动消除疑虑