Laravel中如何返回带HTTP状态码的JSON而非重定向?
Laravel Form Request验证失败返回JSON响应的方法
要让Form Request验证失败时返回带状态码的JSON而非重定向,直接在自定义的请求类中重写failedValidation方法即可,具体步骤如下:
- 在你的
RegisterRequest类中,引入必要命名空间后,覆盖父类的failedValidation方法:
use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class RegisterRequest extends FormRequest { // 这里放置你的验证规则(rules方法)和授权逻辑(authorize方法) protected function failedValidation(Validator $validator) { throw new HttpResponseException( response()->json( [ 'message' => '验证未通过', 'errors' => $validator->errors()->toArray() ], 422 // HTTP 422 是验证失败的标准状态码 ) ); } }
补充说明
Laravel默认会根据请求类型自动判断响应格式:如果请求头包含Accept: application/json,或者是AJAX请求,验证失败时会自动返回JSON。但如果是普通表单提交要强制返回JSON,上面的方法可以确保无论请求类型如何,都返回JSON响应。
内容的提问来源于stack exchange,提问作者Faruh
相关产品推荐
相关产品推荐

