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

如何在Laravel中使用Request类时让验证失败返回JSON响应

如何在Laravel请求验证失败时返回JSON响应

Hey there! 针对你这个注册请求验证失败返回JSON的需求,我给你两种实用的实现方案,按需选择就行:

方案一:在特定Request类中自定义验证失败响应

这是最精准的方式,只针对RegisterCustomerRequest生效,不会影响其他请求。你只需要在请求类里重写failedValidation方法,自定义验证失败后的JSON响应格式:

首先,记得引入需要的依赖类,然后修改你的Request代码:

<?php
namespace App\Http\Requests\Validations;
use App\Http\Requests\Request;
use Illuminate\Validation\ValidationException;
use Illuminate\Http\JsonResponse;

class RegisterCustomerRequest extends Request {
    public function authorize() {
        return true;
    }

    public function rules() {
        return [
            'name' => 'required|min:3|max:255',
            'email' => 'required|email|max:255|unique:customers',
            'password' => 'required|string|min:6|confirmed',
            'agree' => 'required',
        ];
    }

    /**
     * 重写验证失败处理逻辑,返回自定义JSON响应
     *
     * @param \Illuminate\Contracts\Validation\Validator $validator
     * @throws ValidationException
     */
    protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)
    {
        throw new ValidationException(
            $validator,
            new JsonResponse([
                'message' => '验证失败,请检查输入信息',
                'errors' => $validator->errors()
            ], 422)
        );
    }
}

这样一来,只要这个请求的验证不通过,就会立刻返回状态码为422的JSON响应,包含你定义的提示文案和具体的字段错误信息,完全符合你的需求。

方案二:利用Laravel默认的API请求识别机制

其实Laravel本身就自带适配逻辑:如果你的请求是AJAX请求,或者请求头里的Accept字段设置为application/json,Laravel会自动返回JSON格式的验证错误,不需要修改任何代码。

如果你的注册接口是放在routes/api.php里的API路由,通常Laravel已经默认配置了这类路由的响应格式,验证失败时会自动返回JSON。这种方案适合全局统一API响应格式的场景。

补充说明:你的注册控制器方法完全不需要改动,因为Laravel的请求验证是在控制器方法执行前触发的,一旦验证失败,会直接抛出异常并返回响应,不会走到控制器里的业务代码。

内容的提问来源于stack exchange,提问作者Hanan Alhasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:42:28