您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

SpringBoot系列(X)统一异常解决和统一结果返回 [影视源码]

  • 时间:2022-08-20 00:52 编辑: 来源: 阅读:319
  • 扫一扫,手机访问
摘要:SpringBoot系列(X)统一异常解决和统一结果返回 [影视源码]
SpringBoot系列(10)统一异常解析和统一结果返回以前推荐的SpringBoot系列(1) idea新Springboot项目SpringBoot系列(2)入门知识springBoot系列(3)配置文件详解SpringBoot系列(web静态资源配置详解SpringBoot系列(5) Mybat集成完整详细版SpringBoot系列(VI)集成百里香详细版Springboot系列(VII)集成接口文档swagger、使用和测试SpringBoot系列(VIII)分钟学习Springboot多种方式处理跨域SpringBoot系列(IX)正确姿势全局异常捕获和解决方案2。统一结果返回和统一异常3。控制器代码测试和结果4。404例外特殊解决方案。 5.总结介绍:在日常的开发过程中,不可避免的会有一些程序因为某些原因抛出异常,而这些异常一般都是通过试捕的方式来解决,或者通过抛出再抛出的方式来抛出。 这种方法对于程序员来说解决起来也比较麻烦,对于用户来说也不是很友好,所以我们希望它不仅方便程序员写代码,也是一个很好的选择,可以自己解决各种异常,并且可以写重复的代码,提高客户的体验。这时,全局异常解决就显得非常重要和方便。 1.全局异常捕获和解决。由于现在主流项目都是前台后台分离的,我们的异常解析也是按照前台后台分离来描述的。 Springboot也为异常解决提供了很好的支持。它提供了@ControllerAdvice的注释和@ExceptionHandler的注释。前者用于启动全局异常捕获,后者用于解释捕获了哪些异常并解决那些异常。 @ ControllerAdvicePublic Class my Exception Handler { @ Exception Handler(value = Exception . Class)公共字符串异常处理程序(exception e) {system.out.println("发生了异常"+e);返回e . getmessage();}}上面这段代码的意思是,如果代码运行过程中出现异常,它会捕捉到并输出这个异常。 然后我们随机编写一个会导致异常的代码,测试的异常如下 1.png不利于我们分离前景和背景。前景和背景分离后唯一的交互就是json。我们也希望把后台的异常变成json,返回前台解决。 我们来看看统一的结果解。 2.统一结果返回和统一异常代码:公共类result;{//能成功吗?私布尔成功;//状态码私有整数码;//提醒信息私有字符串msg//数据私有测试数据;Public Result() {} //自己设置返回结果的构造函数,publicresult (boolean success,integer code,stringmsg,tdata){ this . success = success;this.code = codethis.msg = msgthis.data = data}//自行设置异常返回的结果公共静态结果定义错误(定义异常de){ result result = new result();result . set success(false);result . set code(de . get error code());result . setmsg(de . get error msg());result.setData(空);返回结果;}//其他异常解析方法返回的结果是公共静态结果other error(error num error num){ result result = new result();result . setmsg(error enum . get error msg());result . set code(error enum . get error code());result . set success(false);result.setData(空);返回结果;}}注意:省略get和set方法。 此外,该方法包含一个自身设置的枚举。 代码如下:public enum error num {//数据操作错误定义成功(200,“nice”)、no _ permission (403,“你没有权限”)、NO_AUTH(401,“能不能先登录”)、NOT_FOUND(404,“找不到资源!”),INTERNAL_SERVER_ERROR(500,“服务器跑了”),;/* *错误代码*/私有整数错误代码;/* *错误消息*/私有字符串errorMsgErrorEnum(Integer errorCode,String error msg){ this . error code = error code;this . error msg = error msg;}公共整数get error code(){ return error code;}公共字符串get error msg(){ return error msg;}}描述:枚举类中定义了常见错误代码和错误提醒。 这里我们定义一个统一的结果返回,在程序异常的时候用静态的方法转换成异常返回指定的格式。 然后我们需要自己设置异常处理类。 代码如下:公共类定义异常扩展运行时异常{受保护的整数错误代码;受保护的字符串errorMsgpublic definition exception(){ } public definition exception(Integer error code,String error msg){ this . error code = error code;this . error msg = error msg;}公共整数get error code(){ return error code;} public void set error code(Integer error code){ this . error code = error code;}公共字符串get error msg(){ return error msg;} public void set error msg(String error msg){ this . error msg = error msg;}}它包含错误的状态代码和错误的提醒信息。 然后我们可以建立一个全局异常解决类来解决各种异常,包括我们自己定义的异常和内部异常。 这可以简化许多代码,并且您不必对每个异常都使用try and catch。 @ ControllerAdvicePublic Class global Exception Handler {/* * * Resolve your own set Exception * */@ Exception Handler(value = definite Exception . Class)@ response body public Result bizexception Handler(definition Exception e){ return Result . define error(e);}/* * *解决剩余异常* */@ exception handler(value = exception . class)@ response body公共结果exception handler(exception one){ return result . other error(error enum。内部_服务器_错误);}}描述:每个方法都注释了一个@ResponseBody,用来将对象解析成json,方便前台和后台的交互。还可以使用@ResponseBody将其放在异常类中。 3.控制器代码测试和结果控制器代码:@ rest controller @ request mapping("/Result ")公共类Result controller { @ get mapping("/get Student ")公共结果get Student(){ Student Student = new Student();student . setage(21);student . setid(111);Student.setName("学习笔记");结果Result = new Result();result . set code(200);result . set success(true);result.setData(学生);Result.setMsg("学生列表信息");返回结果;} @ request mapping("/getdeexception ")public result de exception(){ throw new definition exception(400,"我弄错了");} @ request mapping("/get Exception ")公共结果异常(){ Result Result = new Result();int a = 1/0;返回结果;}}学生类就是之前用过的那个。 包含三个属性。 省略get和set方法。 公共学生{/* * *唯一id */私有整数id;/* * * name */私有字符串名称;/* * *年龄*/私有整数年龄;}然后开始项目逐一测试。 先测试正常数据无异常。 进入浏览器:localhost:8095/result/getstudent 2 . png查看数据是正常返回的json字符串。 没有例外。 然后我们测试我们自己设置的第二个异常解决接口。 进入浏览器localhost:8095/result/getde exception。 3.png可以看到这个自设置的异常被捕获,并返回一个json字符串。 最后,让我们测试其余的异常。 进入浏览器:本地主机:8095/result/get exception 4.png。这里我们已经解决了异常,并正确地返回到前台。 在这里,有许多测试接口的方法。可以用postman,或者idea自带的接口测试工具非常好用。 但是,你可能会发现一个问题,这个方法解决不了404异常,抓不住。 我该怎么办?4.404例外特殊解决方案 默认情况下,SpringBoot不会抛出404异常,所以@ControllerAdvice也无法捕捉到它。 我们可以通过下面的配置让这个注释捕捉404异常 spring . MVC . throw-exception-if-no-handler-found = true spring . resources . add-mappings = false,其中第一句话的意思是:发现404异常时直接抛出异常。 第二句话关闭了默认的静态资源路径映射。 这样也可以捕捉到404错误,但是这样的配置会导致你的静态资源访问出现问题,也就是不适合前台后台不分离的情况。 5.总结本文讲解了如何解决捕捉全局异常和如何自己设置异常的问题,并顺便讲解了统一结果的返回格式,特别解决了404,not found异常并作为统一结果返回。 如果你觉得这篇文章有用,请点赞!QQ截图20200418173928.png


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部