异常处理
如下代码
1 | //添加页面 |
1、上边的代码只要操作不成功仅向用户返回“错误代码:11111,失败信息:操作失败”,无法区别具体的错误信息。
2、service方法在执行过程出现异常在哪捕获?在service中需要都加try/catch,如果在controller也需要添加try/catch,代码冗余严重且不易维护。
解决方案:
1、在Service方法中的编码顺序是先校验判断,有问题则抛出具体的异常信息,最后执行具体的业务操作,返回成功信息。
2、在统一异常处理类中去捕获异常,无需controller捕获异常,向用户返回统一规范的响应信息。
1 | //添加页面 |
1、在controller、service、dao中程序员抛出自定义异常;springMVC框架抛出框架异常类型
2、统一由异常捕获类捕获异常,并进行处理
3、捕获到自定义异常则直接取出错误代码及错误信息,响应给用户。
4、捕获到非自定义异常类型首先从Map中找该异常类型是否对应具体的错误代码,如果有则取出错误代码和错误信息并响应给用户,如果从Map中找不到异常类型所对应的错误代码则统一为99999错误代码并响应给用户。
5、将错误代码及错误信息以Json格式响应给用户。
自定义异常:主要是处理和业务相关的异常
不可预知的异常:主要是处理和业务无关的运行时异常
自定义异常类继承RuntimeException,对代码没有侵入性
统一异常捕获类,在类上加上@ControllerAdvice注解
声明一个方法,加上@ExceptionHandler注解,参数中如果没有写具体的异常,那么默认会拦截所有的异常。如果需要指定拦截的异常,那么需要给出拦截类的class。
springboot日志
日志:开发环境设置level为DEBUG,生产环境设置为ERROR。
springboot中集成了日志记录功能,只需要将日志的配置文件logback-spring.xml(必须是这个文件名)放在resource目录下即可。
在异常类中定义
1 | private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionCatch.class); |
例如
1 |
|
普通的springMVC全局异常(项目有且只有一个全局异常类)
编写全局异常类GlobalExceptionResolver并实现HandlerExceptionResolver,并重写resolveException方法.
在springmvc的配置文件中引入bean
1 | <bean class="com.han.springmvc.exception.GlobalExceptionResolver"/> |