Laravel将所有类型的异常作为JSON发送


Laravel send all types of exceptions as JSON

我正在通过 Laravel 5.2 作为 API 构建我的应用程序,无论错误代码如何,我都需要所有类型的异常都为 json。

我做了这样的事情:

/**
 * Render an exception into an HTTP response.
 *
 * @param  'Illuminate'Http'Request $request
 * @param  'Exception $e
 * @return 'Illuminate'Http'Response
 */
public function render($request, Exception $e)
{
    return response([
        'success' => false,
        'error' => [
            'code' => $e->getCode(),
            'message' => $e->getMessage(),
        ],
    ], $this->convertExceptionToResponse($e)->getStatusCode());
}

它做了很多技巧,但显然这还不够好,因为如果我收到 404 错误,$e->getMessage是空的。

404 错误响应示例:

{
  "success": false,
  "error": {
    "code": 0,
    "message": ""
  }
}

将异常响应为 json 的最佳方式是什么?

也许你应该尝试:

public function render($request, Exception $e)
{
    return response(json_encode([
            'success' => false,
            'error' => [
                'code' => $e->getCode(),
                'message' => $e->getMessage(),
            ],
        ]), $this->convertExceptionToResponse($e)->getStatusCode())
        ->header('Content-Type', 'application/json');
}