当前位置: 首页 > news >正文

专业网站建设最新报价整合营销策划方案模板

专业网站建设最新报价,整合营销策划方案模板,app开发定制公司如,凡科免费建站平台统一结果封装异常处理2#xff0c;统一结果封装2.1 表现层与前端数据传输协议定义2.2 表现层与前端数据传输协议实现2.2.1 环境准备2.2.2 结果封装步骤1:创建Result类步骤2:定义返回码Code类步骤3:修改Controller类的返回值步骤4:启动服务测试3#xff0c;统一异常处理3… 统一结果封装异常处理2统一结果封装2.1 表现层与前端数据传输协议定义2.2 表现层与前端数据传输协议实现2.2.1 环境准备2.2.2 结果封装步骤1:创建Result类步骤2:定义返回码Code类步骤3:修改Controller类的返回值步骤4:启动服务测试3统一异常处理3.1 问题描述3.2 异常处理器的使用3.2.1 环境准备3.2.2 使用步骤步骤1:创建异常处理器类步骤2:让程序抛出异常步骤3:运行程序测试异常处理器类返回结果给前端知识点1RestControllerAdvice知识点2ExceptionHandler3.3 项目异常处理方案3.3.1 异常分类3.3.2 异常解决方案3.3.3 异常解决方案的具体实现步骤1:自定义异常类步骤2:将其他异常包成自定义异常步骤3:处理器类中处理自定义异常步骤4:运行程序目标 能够理解并实现统一结果封装与统一异常处理 2统一结果封装 2.1 表现层与前端数据传输协议定义 SSM整合以及功能模块开发完成后接下来我们在上述案例的基础上分析下有哪些问题需要我们去解决下。首先第一个问题是: 在Controller层增删改返回给前端的是boolean类型数据 在Controller层查询单个返回给前端的是对象 在Controller层查询所有返回给前端的是集合对象 目前我们就已经有三种数据类型返回给前端如果随着业务的增长我们需要返回的数据类型会越来越多。对于前端开发人员在解析数据的时候就比较凌乱了所以对于前端来说如果后台能够返回一个统一的数据结果前端在解析的时候就可以按照一种方式进行解析。开发就会变得更加简单。 所以我们就想能不能将返回结果的数据进行统一具体如何来做大体的思路为: 为了封装返回的结果数据:创建结果模型类封装数据到data属性中为了封装返回的数据是何种操作及是否操作成功:封装操作结果到code属性中操作失败后为了封装返回的错误信息:封装特殊消息到message(msg)属性中 根据分析我们可以设置统一数据返回结果类 public class Result{private Object data;private Integer code;private String msg; }注意: Result类名及类中的字段并不是固定的可以根据需要自行增减提供若干个构造方法方便操作。 2.2 表现层与前端数据传输协议实现 前面我们已经分析了如何封装返回结果数据具体在项目中该如何实现我们通过个例子来操作一把 2.2.1 环境准备 创建一个Web的Maven项目pom.xml添加SSM整合所需jar包创建对应的配置类编写Controller、Service接口、Service实现类、Dao接口和模型类resources下提供jdbc.properties配置文件 因为这个项目环境的内容和SSM整合的内容是一致的所以我们就不在把代码粘出来了大家在练习的时候可以在前面整合的例子案例环境下进行本节内容的开发。 最终创建好的项目结构如下: 2.2.2 结果封装 对于结果封装我们应该是在表现层进行处理所以我们把结果类放在controller包下当然你也可以放在domain包这个都是可以的具体如何实现结果封装具体的步骤为: 步骤1:创建Result类 public class Result {//描述统一格式中的数据private Object data;//描述统一格式中的编码用于区分操作可以简化配置0或1表示成功失败private Integer code;//描述统一格式中的消息可选属性private String msg;public Result() {}//构造方法是方便对象的创建public Result(Integer code,Object data) {this.data data;this.code code;}//构造方法是方便对象的创建public Result(Integer code, Object data, String msg) {this.data data;this.code code;this.msg msg;}//setter...getter...省略 }步骤2:定义返回码Code类 //状态码 public class Code {public static final Integer SAVE_OK 20011;public static final Integer DELETE_OK 20021;public static final Integer UPDATE_OK 20031;public static final Integer GET_OK 20041;public static final Integer SAVE_ERR 20010;public static final Integer DELETE_ERR 20020;public static final Integer UPDATE_ERR 20030;public static final Integer GET_ERR 20040; } **注意:**code类中的常量设计也不是固定的可以根据需要自行增减例如将查询再进行细分为GET_OK,GET_ALL_OK,GET_PAGE_OK等。 步骤3:修改Controller类的返回值 //统一每一个控制器方法返回值 RestController RequestMapping(/books) public class BookController {Autowiredprivate BookService bookService;PostMappingpublic Result save(RequestBody Book book) {boolean flag bookService.save(book);return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERR,flag);}PutMappingpublic Result update(RequestBody Book book) {boolean flag bookService.update(book);return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);}DeleteMapping(/{id})public Result delete(PathVariable Integer id) {boolean flag bookService.delete(id);return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERR,flag);}GetMapping(/{id})public Result getById(PathVariable Integer id) {Book book bookService.getById(id);Integer code book ! null ? Code.GET_OK : Code.GET_ERR;String msg book ! null ? : 数据查询失败请重试;return new Result(code,book,msg);}GetMappingpublic Result getAll() {ListBook bookList bookService.getAll();Integer code bookList ! null ? Code.GET_OK : Code.GET_ERR;String msg bookList ! null ? : 数据查询失败请重试;return new Result(code,bookList,msg);} }步骤4:启动服务测试 新增成功- 查询单个成功 查询单个失败 查询所有 至此我们的返回结果就已经能以一种统一的格式返回给前端。前端根据返回的结果先从中获取code,根据code判断如果成功则取data属性的值如果失败则取msg中的值做提示。 3统一异常处理 3.1 问题描述 在讲解这一部分知识点之前我们先来演示个效果修改BookController类的getById方法 GetMapping(/{id}) public Result getById(PathVariable Integer id) {//手动添加一个错误信息if(id1){int i 1/0;}Book book bookService.getById(id);Integer code book ! null ? Code.GET_OK : Code.GET_ERR;String msg book ! null ? : 数据查询失败请重试;return new Result(code,book,msg); }重新启动运行项目使用PostMan发送请求当传入的id为1则会出现如下效果 前端接收到这个信息后和之前我们约定的格式不一致这个问题该如何解决? 在解决问题之前我们先来看下异常的种类及出现异常的原因: 框架内部抛出的异常因使用不合规导致数据层抛出的异常因外部服务器故障导致例如服务器访问超时业务层抛出的异常因业务逻辑书写错误导致例如遍历业务书写操作导致索引异常等表现层抛出的异常因数据收集、校验等规则导致例如不匹配的数据类型间导致异常工具类抛出的异常因工具类书写不严谨不够健壮导致例如必要释放的连接长期未释放等 看完上面这些出现异常的位置你会发现在我们开发的任何一个位置都有可能出现异常而且这些异常是不能避免的。所以我们就得将异常进行处理。 思考 各个层级均出现异常异常处理代码书写在哪一层? 所有的异常均抛出到表现层进行处理 异常的种类很多表现层如何将所有的异常都处理到呢? 异常分类 表现层处理异常每个方法中单独书写代码书写量巨大且意义不强如何解决? AOP 对于上面这些问题及解决方案SpringMVC已经为我们提供了一套解决方案: 异常处理器: 集中的、统一的处理项目中出现的异常。 3.2 异常处理器的使用 3.2.1 环境准备 创建一个Web的Maven项目pom.xml添加SSM整合所需jar包创建对应的配置类编写Controller、Service接口、Service实现类、Dao接口和模型类resources下提供jdbc.properties配置文件 内容参考前面的项目或者直接使用前面的项目进行本节内容的学习。 最终创建好的项目结构如下: 3.2.2 使用步骤 步骤1:创建异常处理器类 //RestControllerAdvice用于标识当前类为REST风格对应的异常处理器 RestControllerAdvice public class ProjectExceptionAdvice {//除了自定义的异常处理器保留对Exception类型的异常处理用于处理非预期的异常ExceptionHandler(Exception.class)public void doException(Exception ex){System.out.println(嘿嘿,异常你哪里跑);} } 确保SpringMvcConfig能够扫描到异常处理器类 步骤2:让程序抛出异常 修改BookController的getById方法添加int i 1/0. GetMapping(/{id}) public Result getById(PathVariable Integer id) {int i 1/0;Book book bookService.getById(id);Integer code book ! null ? Code.GET_OK : Code.GET_ERR;String msg book ! null ? : 数据查询失败请重试;return new Result(code,book,msg); }步骤3:运行程序测试 说明异常已经被拦截并执行了doException方法。 异常处理器类返回结果给前端 //RestControllerAdvice用于标识当前类为REST风格对应的异常处理器 RestControllerAdvice public class ProjectExceptionAdvice {//除了自定义的异常处理器保留对Exception类型的异常处理用于处理非预期的异常ExceptionHandler(Exception.class)public Result doException(Exception ex){System.out.println(嘿嘿,异常你哪里跑)return new Result(666,null,嘿嘿,异常你哪里跑);} } 启动运行程序测试 至此就算后台执行的过程中抛出异常最终也能按照我们和前端约定好的格式返回给前端。 知识点1RestControllerAdvice 名称RestControllerAdvice类型类注解位置Rest风格开发的控制器增强类定义上方作用为Rest风格开发的控制器类做增强 **说明:**此注解自带ResponseBody注解与Component注解具备对应的功能 知识点2ExceptionHandler 名称ExceptionHandler类型方法注解位置专用于异常处理的控制器方法上方作用设置指定异常的处理方案功能等同于控制器方法出现异常后终止原始控制器执行,并转入当前方法执行 **说明**此类方法可以根据处理的异常不同制作多个方法分别处理对应的异常 3.3 项目异常处理方案 3.3.1 异常分类 异常处理器我们已经能够使用了那么在咱们的项目中该如何来处理异常呢? 因为异常的种类有很多如果每一个异常都对应一个ExceptionHandler那得写多少个方法来处理各自的异常所以我们在处理异常之前需要对异常进行一个分类: 业务异常BusinessException 规范的用户行为产生的异常 用户在页面输入内容的时候未按照指定格式进行数据填写如在年龄框输入的是字符串 不规范的用户行为操作产生的异常 如用户故意传递错误数据 系统异常SystemException 项目运行过程中可预计但无法避免的异常 比如数据库或服务器宕机 其他异常Exception 编程人员未预期到的异常如:用到的文件不存在 将异常分类以后针对不同类型的异常要提供具体的解决方案: 3.3.2 异常解决方案 业务异常BusinessException 发送对应消息传递给用户提醒规范操作 大家常见的就是提示用户名已存在或密码格式不正确等 系统异常SystemException 发送固定消息传递给用户安抚用户 系统繁忙请稍后再试系统正在维护升级请稍后再试系统出问题请联系系统管理员等 发送特定消息给运维人员提醒维护 可以发送短信、邮箱或者是公司内部通信软件 记录日志 发消息和记录日志对用户来说是不可见的属于后台程序 其他异常Exception 发送固定消息传递给用户安抚用户发送特定消息给编程人员提醒维护纳入预期范围内 一般是程序没有考虑全比如未做非空校验等 记录日志 3.3.3 异常解决方案的具体实现 思路: 1.先通过自定义异常完成BusinessException和SystemException的定义 2.将其他异常包装成自定义异常类型 3.在异常处理器类中对不同的异常进行处理 步骤1:自定义异常类 //自定义异常处理器用于封装异常信息对异常进行分类 public class SystemException extends RuntimeException{private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public SystemException(Integer code, String message) {super(message);this.code code;}public SystemException(Integer code, String message, Throwable cause) {super(message, cause);this.code code;}}//自定义异常处理器用于封装异常信息对异常进行分类 public class BusinessException extends RuntimeException{private Integer code;public Integer getCode() {return code;}public void setCode(Integer code) {this.code code;}public BusinessException(Integer code, String message) {super(message);this.code code;}public BusinessException(Integer code, String message, Throwable cause) {super(message, cause);this.code code;}} 说明: 让自定义异常类继承RuntimeException的好处是后期在抛出这两个异常的时候就不用在try…catch…或throws了自定义异常类中添加code属性的原因是为了更好的区分异常是来自哪个业务的 步骤2:将其他异常包成自定义异常 假如在BookServiceImpl的getById方法抛异常了该如何来包装呢? public Book getById(Integer id) {//模拟业务异常包装成自定义异常if(id 1){throw new BusinessException(Code.BUSINESS_ERR,请不要使用你的技术挑战我的耐性!);}//模拟系统异常将可能出现的异常进行包装转换成自定义异常try{int i 1/0;}catch (Exception e){throw new SystemException(Code.SYSTEM_TIMEOUT_ERR,服务器访问超时请重试!,e);}return bookDao.getById(id); }具体的包装方式有 方式一:try{}catch(){}在catch中重新throw我们自定义异常即可。方式二:直接throw自定义异常即可 上面为了使code看着更专业些我们在Code类中再新增需要的属性 //状态码 public class Code {public static final Integer SAVE_OK 20011;public static final Integer DELETE_OK 20021;public static final Integer UPDATE_OK 20031;public static final Integer GET_OK 20041;public static final Integer SAVE_ERR 20010;public static final Integer DELETE_ERR 20020;public static final Integer UPDATE_ERR 20030;public static final Integer GET_ERR 20040;public static final Integer SYSTEM_ERR 50001;public static final Integer SYSTEM_TIMEOUT_ERR 50002;public static final Integer SYSTEM_UNKNOW_ERR 59999;public static final Integer BUSINESS_ERR 60002; } 步骤3:处理器类中处理自定义异常 //RestControllerAdvice用于标识当前类为REST风格对应的异常处理器 RestControllerAdvice public class ProjectExceptionAdvice {//ExceptionHandler用于设置当前处理器类对应的异常类型ExceptionHandler(SystemException.class)public Result doSystemException(SystemException ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(ex.getCode(),null,ex.getMessage());}ExceptionHandler(BusinessException.class)public Result doBusinessException(BusinessException ex){return new Result(ex.getCode(),null,ex.getMessage());}//除了自定义的异常处理器保留对Exception类型的异常处理用于处理非预期的异常ExceptionHandler(Exception.class)public Result doOtherException(Exception ex){//记录日志//发送消息给运维//发送邮件给开发人员,ex对象发送给开发人员return new Result(Code.SYSTEM_UNKNOW_ERR,null,系统繁忙请稍后再试);} }步骤4:运行程序 根据ID查询 如果传入的参数为1会报BusinessException 如果传入的是其他参数会报SystemException 对于异常我们就已经处理完成了不管后台哪一层抛出异常都会以我们与前端约定好的方式进行返回前端只需要把信息获取到根据返回的正确与否来展示不同的内容即可。 小结 以后项目中的异常处理方式为: 学习笔记 from 黑马程序员 By – Suki 2023/4/5
http://www.w-s-a.com/news/648820/

相关文章:

  • 北京网站开发建设南昌网站小程序开发
  • 网站如何做ip签名图片宁波互联网
  • 中山小榄网站建设长沙网络营销品牌排名
  • 推广优化厂商联系方式网站推广教程优化整站
  • 为外国企业做中文网站建设网站建设单位哪家好
  • 生物制药公司网站模板有没有专业做steam创客的网站
  • 福田做棋牌网站建设找哪家效益快弄一个微信小程序多少钱
  • 成都哪家做网站建设比较好做推广赚钱的网站
  • 常州专门做网站的公司有哪些网页模板下载网站10
  • linx服务器怎么做网站做长页网站
  • 汕头网站建设sagevis服装设计公司有什么职位
  • 网站流量分析报告医院网站制作公司
  • 仿58网站怎么做邯郸网站设计多少钱
  • 广州网站制作开发wordpress中文固定连接
  • 成都网站建设公司盈利吗专门做二手手机的网站有哪些
  • 手机网站设计需要学什么wordpress读法
  • WordPress pajx天津短视频seo
  • 检察院门户网站建设情况总结深圳网站制作长沙
  • 单页导航网站模板搜索量查询
  • 如何在一个地方建设网站营销型定制网站
  • 保定网站建设方案维护动易网站中添加邮箱
  • 简易网站的html代码wordpress音乐html
  • 四川住房和城乡建设厅网站打不开海山网站建设
  • 深圳设计功能网站如何用html制作网站
  • 网络优化软件下载竞价排名和seo的区别
  • 龙华新区做网站中高端网站建设
  • 网站开发小图标大全手机网站设计开发
  • 网页设计设计一个网站口碑营销的优点
  • 枣庄建网站的公司唐山企业网络推广培训
  • 张家界建设企业网站学校资源网站建设方案