Laravel API возвращает ошибку вида 404 вместо ошибки JSON - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь создать RESTful API с помощью laravel, я пытаюсь получить ресурс с недопустимым идентификатором, и результат 404, поскольку он не найден, но моя проблема в том, что ответ не в формате JSON,но View 404 (по умолчанию) с HTML.Есть ли способ конвертировать ответ в JSON?В этой ситуации я использую Homestead.

Я пытаюсь включить запасной маршрут, но, похоже, он не подходит для этого случая.

Route::fallback(function () {
    return response()->json(['message' => 'Not Found.'], 404);
});

Я пытаюсь изменить Обработчик (App \Исключения), но ничего не изменилось.

public function render($request, Exception $e)
{
    if ($e instanceof ModelNotFoundException) {
        if ($request->ajax()) {
            return response()->toJson([
                'message' => 'Not Found.',
            ], 404);
        }
    }

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

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Вам необходимо отправить правильный заголовок Accept в вашем запросе : 'Accept':'application/json'.

Тогда Illuminate\Foundation\Exceptions\Handler позаботится о форматировании в методе render в вашем ответе :

return $request->expectsJson()
                    ? $this->prepareJsonResponse($request, $e)
                    : $this->prepareResponse($request, $e);
0 голосов
/ 01 июня 2019

, если ваш проект только RESTful API и нет представлений, вы можете добавить новый middleware, который добавляет заголовок ['accept' => 'application/json'] ко всем запросам.это гарантирует, что все ответы вернут json вместо представлений

<?php

namespace App\Http\Middleware;

use Closure;

class AddAjaxHeader
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $request->headers->add(['accept' => 'application/json']);
        return $next($request);
    }
}

и добавят его в Kernel.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...