当未找到模型时,对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。
处理这种情况的正确方法是什么?
答案 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);
}