Posted on: May 14, 2021 11:03 AM
Posted by: Renato
Views: 2079
Hoje eu estava trabalhando em uma API escrita em Laravel usando policies, e um endpoint não estava me retornando json, e sim blade com erro 403
errors::403
/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/403.blade.php
Por padrão, se você não definir uma solicitação, aceite os cabeçalhos que eles usarão como padrão Accept: */*
. Com aqueles definidos, o laravel responde com um Content-Type
de text/html
.
Para o propósito deste projeto, cada resposta da API precisa retornar JSON.
Podemos conseguir isso facilmente usando middleware para sobrescrever os Accept
cabeçalhos na solicitação de entrada e definindo-os como application/json
.
Criei uma nova classe de middleware:
php artisan make:middleware RespondWithJsonMiddleware
Agora abra o novo arquivo criado em app/Http/ Middleware e altere o método de manipulação para ficar assim:
E isso é o mais simples possível, agora só precisamos aplicar esse middleware a um determinado conjunto de rotas.
Aplicando a todas as rotas de API
ara meus propósitos, eu queria que cada solicitação retornasse JSON, então adicionei esta nova classe ao grupo de middleware global api em app/Http/Kernel.php
Se olharmos o arquivo app/Providers/RouteServiceProvider.php, podemos ver que este grupo de middleware api é aplicado a todas as rotas em `` routes/api.php`:
Então depois destas mudanças o retorno foi um JSON como eu queria.
A versão do Laravel que eu estou usando foi Laravel 8.
Fonte: https://www.talvbansal.me/blog/force-laravel-to-return-json-responses/
Donate to Site
Renato
Developer