简述营销型企业网站建设的内容,网站开发需要后台吗,wordpress wpsyntax,某网站seo诊断分析3. 异常处理
3.1 当前问题
登录功能和登录校验功能我们都实现了#xff0c;下面我们学习下今天最后一块技术点#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象#xff0c;再来介绍异常处理的方案。 我们打开浏览器#xff0c;访问系统中的新增部…3. 异常处理
3.1 当前问题
登录功能和登录校验功能我们都实现了下面我们学习下今天最后一块技术点异常处理。首先我们先来看一下系统出现异常之后会发生什么现象再来介绍异常处理的方案。 我们打开浏览器访问系统中的新增部门操作系统中已经有了 就业部 这个部门我们再来增加一个就业部看看会发生什么现象。 点击确定之后窗口关闭了页面没有任何反应就业部也没有添加上。 而此时大家会发现网络请求报错了。 状态码为500表示服务器端异常我们打开idea来看一下服务器端出了什么问题。 上述错误信息的含义是dept部门表的name字段的值 就业部 重复了因为在数据库表dept中已经有了就业部我们之前设计这张表时为name字段建议了唯一约束所以该字段的值是不能重复的。
而当我们再添加就业部这个部门时就违反了唯一约束此时就会报错。 我们来看一下出现异常之后最终服务端给前端响应回来的数据长什么样。 响应回来的数据是一个JSON格式的数据。但这种JSON格式的数据还是我们开发规范当中所提到的统一响应结果Result吗显然并不是。由于返回的数据不符合开发规范所以前端并不能解析出响应的JSON数据。
接下来我们需要思考的是出现异常之后当前案例项目的异常是怎么处理的 答案没有做任何的异常处理
当我们没有做任何的异常处理时我们三层架构处理异常的方案 Mapper接口在操作数据库的时候出错了此时异常会往上抛(谁调用Mapper就抛给谁)会抛给service。 service 中也存在异常了会抛给controller。 而在controller当中我们也没有做任何的异常处理所以最终异常会再往上抛。最终抛给框架之后框架就会返回一个JSON格式的数据里面封装的就是错误的信息但是框架返回的JSON格式的数据并不符合我们的开发规范。 3.2 解决方案
那么在三层构架项目中出现了异常该如何处理? 方案一在所有Controller的所有方法中进行try…catch处理 缺点代码臃肿不推荐 方案二全局异常处理器 好处简单、优雅推荐 3.3 全局异常处理器
我们该怎么样定义全局异常处理器 定义全局异常处理器非常简单就是定义一个类在类上加上一个注解RestControllerAdvice加上这个注解就代表我们定义了一个全局异常处理器。 在全局异常处理器当中需要定义一个方法来捕获异常在这个方法上需要加上注解ExceptionHandler。通过ExceptionHandler注解当中的value属性来指定我们要捕获的是哪一类型的异常。
RestControllerAdvice
public class GlobalExceptionHandler {
//处理异常ExceptionHandler(Exception.class) //指定能够处理的异常类型public Result ex(Exception e){e.printStackTrace();//打印堆栈中的异常信息
//捕获到异常之后响应一个标准的Resultreturn Result.error(对不起,操作失败,请联系管理员);}
} RestControllerAdvice ControllerAdvice ResponseBody 处理异常的方法返回值会转换为json后再响应给前端 重新启动SpringBoot服务打开浏览器再来测试一下添加部门这个操作我们依然添加已存在的 就业部 这个部门 此时我们可以看到出现异常之后异常已经被全局异常处理器捕获了。然后返回的错误信息被前端程序正常解析然后提示出了对应的错误提示信息。 以上就是全局异常处理器的使用主要涉及到两个注解 RestControllerAdvice //表示当前类为全局异常处理器 ExceptionHandler //指定可以捕获哪种类型的异常进行处理