LaravelのAPIレスポンスエラーをJSONで取得する方法
Published:
API利用時にエラーをJSONで貰いたいとき、検索するとapp/Exceptions/handler.phpを編集するという内容が良く出てきます。
しかし、そのようなことをしなくてもLaravelはリクエスト時に
Acceptヘッダーに application/json を指定すれば、自動的にJSONになります。
debugが有効であればabortヘルパやトレース情報もJSONになります。
fetch時のヘッダ設定例
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
'X-CSRF-TOKEN': csrf,
}
バリデーションエラーのレスポンス例
422 Unprocessable Entity
{
"message": "The given data was invalid.",
"errors": {
"image": [
"imageは、必ず指定してください。"
]
}
}
abortヘルパのレスポンス例
{
"message": "テストエラー",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
"file": "/home/vagrant/test/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
"line": 940,
"trace": [
{
"file": "/home/vagrant/test/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php",
"line": 35,
"function": "abort",
"class": "Illuminate\\Foundation\\Application",
"type": "->"
},
{
"file": "/home/vagrant/test/app/Http/Controllers/API/TestController.php",
"line": 36,
"function": "abort"
},
(省略)
]
}
debugがfalseの時は message だけになる。