Laravel 5.7 ModelNotFoundException不为API调用返回json

时间:2019-06-07 13:17:31

标签: php laravel

当未找到模型时,对laravel 5.7应用程序api路由进行api调用时,我想返回json响应。为此,我像这样修改了render()的{​​{1}}方法

app\Exceptions\Handler.php

并且我的控制器public function render($request, Exception $exception) { if ($exception instanceof ModelNotFoundException && $request->wantsJson()) { return response()->json(['message' => 'Not Found!'], 404); } return parent::render($request, $exception); } 方法正在使用这样的show()模型

Book

对邮递员进行测试,对public function show(Book $book) { return new BookResource($book->load('ratings')); } (ID 1已删除)的get调用不断返回默认的laravel 404 not found页面而不是json。

我错过了某个步骤吗?我还注意到,在这样的控制器localhost:8000/api/books/1方法内添加条件语句

show()

返回相同的html结果而不是json。

处理这种情况的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

您可以删除$request->wantsJson

或者您可以在请求"Accept" => "application/json"

中设置标题

答案 1 :(得分:0)

您的代码正确。问题在于您可能正在本地环境中对其进行测试,因此在.env中已设置:

APP_DEBUG=true,将其切换为APP_DEBUG=false,您将看到自定义消息。

PS:如果您的客户发送了正确的标头信息,则$request->wantsJson()是不必要的,例如:'accept:application/json'

答案 2 :(得分:-1)

这可以为您提供帮助吗?

    public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException && ($request->wantsJson() || $request->ajax())) {
            return response()->json(['message' => 'Not Found!'], 404);
        }

        return parent::render($request, $exception);
    }