美文网首页
laravel 接口异常错误返回json数据

laravel 接口异常错误返回json数据

作者: DD生活 | 来源:发表于2022-04-19 15:07 被阅读0次

    在laravel中默认返回的异常是html的形式展现在页面上面,当我们写api接口时候希望返回json给前端希望能够不会出现神奇的bug。

    找到文件Exceptions\Handler.php重写render方法

    重写代码

     /**
         * 重写render
         * @param $request
         * @param Throwable $e
         * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response|void
         * @throws Throwable
         */
        public function render($request, Throwable $e)
        {
            if (!$request->is('api/*')) {
                return parent::render($request, $e);
            }
    
    
            $error = $this->convertExceptionToResponse($e);
            $api_e = FlattenException::create($e);
            $debug['line'] =  $api_e->getLine();
            $debug['file'] =  $api_e->getFile();
            $debug['class'] = $api_e->getClass();
            $debug['trace'] = $api_e->getTrace();
            return response()->json([
                'status' => false,
                'code'=>$error->getStatusCode(),
                'message'=>$api_e->getMessage(),
                'data'=>$debug,
            ], $error->getStatusCode());
        }
    

    返回内容

    {
        "status": false,
        "code": 404,
        "message": "",
        "data": {
            "line": 43,
            "file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php",
            "class": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
            "trace": [
                {
                    "namespace": "",
                    "short_class": "",
                    "class": "",
                    "type": "",
                    "function": "",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php",
                    "line": 43,
                    "args": []
                },
                {
                    "namespace": "Illuminate\\Routing",
                    "short_class": "AbstractRouteCollection",
                    "class": "Illuminate\\Routing\\AbstractRouteCollection",
                    "type": "->",
                    "function": "handleMatchedRoute",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php",
                    "line": 162,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "null",
                            null
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Routing",
                    "short_class": "RouteCollection",
                    "class": "Illuminate\\Routing\\RouteCollection",
                    "type": "->",
                    "function": "match",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                    "line": 673,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Routing",
                    "short_class": "Router",
                    "class": "Illuminate\\Routing\\Router",
                    "type": "->",
                    "function": "findRoute",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                    "line": 662,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Routing",
                    "short_class": "Router",
                    "class": "Illuminate\\Routing\\Router",
                    "type": "->",
                    "function": "dispatchToRoute",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
                    "line": 651,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Routing",
                    "short_class": "Router",
                    "class": "Illuminate\\Routing\\Router",
                    "type": "->",
                    "function": "dispatch",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http",
                    "short_class": "Kernel",
                    "class": "Illuminate\\Foundation\\Http\\Kernel",
                    "type": "->",
                    "function": "Illuminate\\Foundation\\Http\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 128,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
                    "line": 21,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http\\Middleware",
                    "short_class": "TransformsRequest",
                    "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
                    "line": 31,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http\\Middleware",
                    "short_class": "ConvertEmptyStringsToNull",
                    "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
                    "line": 21,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http\\Middleware",
                    "short_class": "TransformsRequest",
                    "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
                    "line": 40,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http\\Middleware",
                    "short_class": "TrimStrings",
                    "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
                    "line": 27,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http\\Middleware",
                    "short_class": "ValidatePostSize",
                    "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
                    "line": 86,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http\\Middleware",
                    "short_class": "PreventRequestsDuringMaintenance",
                    "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/fruitcake/laravel-cors/src/HandleCors.php",
                    "line": 52,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Fruitcake\\Cors",
                    "short_class": "HandleCors",
                    "class": "Fruitcake\\Cors\\HandleCors",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
                    "line": 39,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Http\\Middleware",
                    "short_class": "TrustProxies",
                    "class": "Illuminate\\Http\\Middleware\\TrustProxies",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 167,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ],
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "Illuminate\\Pipeline\\{closure}",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
                    "line": 103,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Pipeline",
                    "short_class": "Pipeline",
                    "class": "Illuminate\\Pipeline\\Pipeline",
                    "type": "->",
                    "function": "then",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
                    "line": 142,
                    "args": [
                        [
                            "object",
                            "Closure"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http",
                    "short_class": "Kernel",
                    "class": "Illuminate\\Foundation\\Http\\Kernel",
                    "type": "->",
                    "function": "sendRequestThroughRouter",
                    "file": "/project_path/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
                    "line": 111,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "Illuminate\\Foundation\\Http",
                    "short_class": "Kernel",
                    "class": "Illuminate\\Foundation\\Http\\Kernel",
                    "type": "->",
                    "function": "handle",
                    "file": "/project_path/public/index.php",
                    "line": 52,
                    "args": [
                        [
                            "object",
                            "Illuminate\\Http\\Request"
                        ]
                    ]
                },
                {
                    "namespace": "",
                    "short_class": "",
                    "class": "",
                    "type": "",
                    "function": "require_once",
                    "file": "/project_path/server.php",
                    "line": 21,
                    "args": [
                        [
                            "string",
                            "/project_path/public/index.php"
                        ]
                    ]
                }
            ]
        }
    }
    

    相关文章

      网友评论

          本文标题:laravel 接口异常错误返回json数据

          本文链接:https://www.haomeiwen.com/subject/jzbsertx.html