自定义异常类(restful api)

智极启航
• 阅读 3992

ThinkPHP框架中的异常类不适合作为接口开发的异常显示,通常都需要自定义一个符合项目的异常类。restful api数据结构格式一般是:

  • status 业务状态码
  • message 提示信息
  • data 数据信息

  1. 在项目中新建文件:application\common\lib\exception\ApiHandleException.php,继承Handle类,覆盖掉原来的render方法异常处理类。实例代码:

    <?php
    
    namespace app\common\lib\exception;
    use think\exception\Handle;
    
    class ApiHandleException extends Handle{
        public $httpCode = 500;
        public function render(\Exception $e){
            if(config('app_debug') == true){
                return parent::render($e);
            }
            if($e instanceof ApiException){
                $this->httpCode = $e->httpCode;
            }
            $data=[
                'status' => 0,
                'message' => $e->getMessage()  ,
                'data' => [],
            ];
            return json($data, $this->httpCode);
        }
    
    }
  2. 在config.php中加入自己定义的异常类的namespace路径

    // 异常处理handle类
        'exception_handle'       => '\app\common\lib\exception\ApiHandleException',
  3. 在项目中新建文件:application\common\lib\exception\ApiException.php,

    <?php
    namespace app\common\lib\exception;
    use think\Exception;
    
    class ApiException extends Exception{
        public $message = '';
        public $httpCode = 500;
        public $code = 0;
        
        public function __construct($message = '', $httpCode = 0, $code = 0){
            $this->message = $message;
            $this->httpCode = $httpCode;
            $this->code = $code;
        }
    }
  4. 输出异常例子

       public function test($status){
           if($status != 1){
               throw new ApiException('提交不合法', 400);
           } 
           return $status;
       }
        
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
4年前
java异常处理
_1.异常的分类_Error:称为错误,有java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理。Exception:所以异常类的父类,其子类对应了各种各样可能出现的异常,一般需要用户显示的声明或捕获。RuntimeException:一类特殊的异常,如被0除,数组下标超范围等,其产生比较频繁,处理比较麻烦,如果显示
Easter79 Easter79
4年前
springboot2.x如何配置全局自定义异常
为什么要捕获异常?我们开发中,经常运行时,代码会报错,这时候我们有可能抛出异常,而不是用try..catch来解决.而且现在前后端分离,如果不捕获异常的话,前端那边的人估计会被报的错搞得焦头烂额的.springboot2.x是怎么自定义异常的?怎么捕获异常的?我们自定义异常类,需要继承一个RuntimeExceptio
Stella981 Stella981
4年前
Dubbo的异常处理
最近在整Dubbo的框架,使用zookeeper做注册中心,项目中有service层作为provider(提供者),web层作为consumer(消费者),当在做自定义异常的抛出时,遇到了问题:1、web层不能识别异常为自定义异常类型,异常类型为RuntimeException。2、当修改识别类型为RuntimeException时,从异常当中获取到
Easter79 Easter79
4年前
SpringMVC源码(五)
SpringMVC除了对请求URL的路由处理特别方便外,还支持对异常的统一处理机制,可以对业务操作时抛出的异常,unchecked异常以及状态码的异常进行统一处理。SpringMVC既提供简单的配置类,也提供了细粒度的异常控制机制。SpringMVC中所有的异常处理通过接口HandlerExceptionResolver来实现,接口中只定义了一个方法
Wesley13 Wesley13
4年前
JEE开发异常处理
      在Java开发中,到处可见Exception或者它的子类。如何在一个已有的框架中或者自己的项目中利用好异常,而不让异常漫天飞,需要开发的积累和总结,这篇日志就为这个目的总结几年来的开发对异常使用总结吧。      首先认识Java异常体系结构,Java中使用Throwable作为所有的异常父类,下面有两大子类Error和Excepti
Easter79 Easter79
4年前
Spring异常处理
@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度@ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开@ResponseStatus:可以将某种异常映射为HTTP状态码@ControllerAdvicepublicclassExceptio
Wesley13 Wesley13
4年前
JAVA学习笔记 之 异常
异常的概述代码在运行时期发生的问题就称之为异常。在java中,异常被封装成为了一个类,当程序出现了异常类中的问题时,异常的信息(如位置和原因)就会被抛出。在java中用Exception来描述异常,publicclassExceptionextendsThrowable则是异常的继承体系。 Throwable是所有错误或异常的
Easter79 Easter79
4年前
SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
本文源码GitHub:知了一笑https://github.com/cicadasmile/springbootbase一、异常分类这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。1、业务异常业务异常主要是一些可预见性异常,处理业务异常,用来提示用户
Stella981 Stella981
4年前
PlayJava Day020
1.异常Exception补充:①错误(Error)指的是致命性错误,一般无法处理②异常以类的形式封装程序可以处理的异常对应的类是java.lang.Exception及其子类运行时异常对应的类是java.lang.RuntimeException错误异常对应的类是java.lang.Error③异常相关类的继承树:java.la
Stella981 Stella981
4年前
SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
本文源码GitHub:知了一笑https://github.com/cicadasmile/springbootbase一、异常分类这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常。1、业务异常业务异常主要是一些可预见性异常,处理业务异常,用来提示用户
kenx kenx
2年前
SpringBoot定义优雅全局统一Restful API 响应框架五
闲话不多说,继续优化全局统一RestfulAPI响应框架做到项目通用接口可扩展。如果没有看前面几篇文章请先看前面几篇这里解决上一篇留下问题如何实现接口错误国际化。还有上一篇错误提示也不是很友好我们可以在进一步抽象出通用异常接口。异常信息应由固定异常编码信息