Laravel 9 API用户CRUD报错跳转首页,求助返回JSON错误信息
解决Laravel 9 API错误返回JSON而非跳转首页的问题
1. 确保前端请求携带正确请求头
前端发送API请求时,必须在请求头中添加 Accept: application/json,Laravel会依据这个头识别请求为API类型,优先返回JSON格式响应。
2. 自定义异常处理器
修改 app/Exceptions/Handler.php 文件,添加针对API请求的异常处理逻辑:
步骤1:引入所需异常类
在文件顶部引入相关异常类:
use Illuminate\Auth\AuthenticationException; use Illuminate\Validation\ValidationException;
步骤2:在register方法中添加异常渲染逻辑
在register方法内加入以下代码,分别处理验证错误和认证错误:
// 处理验证错误(如重复邮箱、字段规则不符合要求) $this->renderable(function (ValidationException $e, $request) { if ($request->is('api/*')) { return response()->json([ 'status' => 'error', 'message' => '验证失败,请检查输入内容', 'errors' => $e->errors() ], 422); } }); // 处理认证错误(如登录账号或密码错误) $this->renderable(function (AuthenticationException $e, $request) { if ($request->is('api/*')) { return response()->json([ 'status' => 'error', 'message' => '登录失败,账号或密码不正确' ], 401); } }); // 可选:全局处理其他API异常(如资源未找到) $this->renderable(function (\Exception $e, $request) { if ($request->is('api/*')) { return response()->json([ 'status' => 'error', 'message' => $e->getMessage() ], method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 500); } });
3. 确认路由归属API组
所有API相关路由必须定义在 routes/api.php 文件中,该文件的路由默认带有 /api 前缀,并自动应用 api 中间件组,便于Laravel识别API请求。
验证效果
测试错误场景:
- 注册提交重复邮箱时,会返回包含错误详情的JSON响应(状态码422)
- 登录输入错误账号/密码时,会返回登录失败的JSON提示(状态码401)
内容的提问来源于stack exchange,提问作者joe06
相关产品推荐
相关产品推荐

