Laravel验证不通过时如何返回JSON格式的响应
Laravel 验证图片失败返回 JSON 响应的实现方案
方法1:手动创建验证器(灵活度最高,无需修改全局配置)
不使用$request->validate()快捷验证方法,手动构造验证实例,校验失败后直接返回自定义结构的JSON响应:
use Illuminate\Support\Facades\Validator; // 定义验证规则 $validator = Validator::make($request->all(), [ 'file' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', ]); // 校验失败直接返回JSON if ($validator->fails()) { return response()->json([ 'code' => 400, 'message' => '文件校验不通过', 'error_list' => $validator->errors() ], 400); } // 验证通过后执行后续业务逻辑
方法2:重写表单请求类的校验失败方法(适用于单独封装验证规则的场景)
如果你把验证逻辑抽离到了单独的FormRequest表单请求类中,可以重写failedValidation方法实现统一JSON返回:
use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; // 在你的自定义表单请求类中添加以下方法 protected function failedValidation(Validator $validator) { throw new HttpResponseException( response()->json([ 'code' => 400, 'message' => '参数校验失败', 'error_list' => $validator->errors() ], 400) ); }
补充说明
- 默认场景下,如果请求头携带
Accept: application/json,Laravel原生的$request->validate()方法校验失败时会自动返回JSON格式的错误响应,无需额外编写代码。 - 你现有规则里的
max:2048单位为KB,对应2MB的文件大小限制,符合你的需求。
内容的提问来源于stack exchange,提问作者Sujki87
相关产品推荐
相关产品推荐

