Laravel Lumen 确保 JSON 响应

2022-08-30 17:25:13

我是Laravel和Lumen的新手。我想确保我总是只得到一个JSON对象作为输出。如何在Lumen中执行此操作?

我可以使用 .但是当错误发生时,API会给我错误。但我只想要回应。response()->json($response);text/htmlapplication/json

提前致谢。


答案 1

您需要调整异常处理程序 () 以返回所需的响应。app/Exceptions/Handler.php

这是一个非常基本的例子,说明可以做些什么。

public function render($request, Exception $e)
{
    $rendered = parent::render($request, $e);

    return response()->json([
        'error' => [
            'code' => $rendered->getStatusCode(),
            'message' => $e->getMessage(),
        ]
    ], $rendered->getStatusCode());
}

答案 2

基于@Wader答案的更准确的解决方案可以是:

use Illuminate\Http\JsonResponse;

public function render($request, Exception $e)
{
    $parentRender = parent::render($request, $e);

    // if parent returns a JsonResponse 
    // for example in case of a ValidationException 
    if ($parentRender instanceof JsonResponse)
    {
        return $parentRender;
    }

    return new JsonResponse([
        'message' => $e instanceof HttpException
            ? $e->getMessage()
            : 'Server Error',
    ], $parentRender->status());
}

推荐