You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:45:25