Laravel 9中使用Postman提交POST数据至数据库的结果异常问题
问题:Laravel 9中form-data提交POST请求返回JSON结构不符合预期
我在Laravel 9中通过Postman以form-data格式向数据库提交POST数据,期望返回指定结构的JSON结果,但实际返回结果与预期不符。
控制器代码
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\M_Barang; class Utama extends Controller { public function index() { return view('Utama'); } public function store(Request $request) { $this->validate($request, [ 'file' => 'required|max:2048' ]); $file = $request->file('file'); $nama_file = time()."_".$file->getClientOriginalName(); $tujuan_upload = 'data_file'; if ($file->move($tujuan_upload,$nama_file)) { $data = M_Barang::create([ 'nama_produk' => $request->nama_produk, 'harga' => $request->harga, 'gambar' => $nama_file ]); $res['message'] = "succsess!"; $res['values'] = $data; return response($res); } } }
实际返回结果

预期返回结果

问题分析与修复方案
1. 核心问题点
- 直接返回模型实例导致响应结构不符合预期,会携带额外属性
- 存在拼写错误:
succsess应为success - 未对
nama_produk和harga做必填验证,数据完整性无法保障 - 文件移动失败时无返回逻辑,会导致请求无响应
2. 修改后的控制器代码
public function store(Request $request) { // 新增字段验证,确保提交数据完整合规 $this->validate($request, [ 'file' => 'required|max:2048', 'nama_produk' => 'required|string', 'harga' => 'required|numeric' ]); $file = $request->file('file'); $nama_file = time() . "_" . $file->getClientOriginalName(); $tujuan_upload = 'data_file'; if ($file->move($tujuan_upload, $nama_file)) { $data = M_Barang::create([ 'nama_produk' => $request->nama_produk, 'harga' => $request->harga, 'gambar' => $nama_file ]); // 构建完全匹配预期的响应结构 return response()->json([ 'message' => "success!", 'values' => [ 'id' => $data->id, 'nama_produk' => $data->nama_produk, 'harga' => $data->harga, 'gambar' => $data->gambar, 'created_at' => $data->created_at->toDateTimeString(), 'updated_at' => $data->updated_at->toDateTimeString() ] ], 201); // 用201状态码表示资源创建成功 } // 文件上传失败时返回错误响应 return response()->json([ 'message' => "文件上传失败" ], 400); }
3. 额外检查项
- 确保
M_Barang模型中已将字段加入$fillable,避免批量赋值报错:class M_Barang extends \Illuminate\Database\Eloquent\Model { protected $fillable = ['nama_produk', 'harga', 'gambar']; } - 确认
data_file目录存在且拥有写入权限,否则文件无法移动 - Postman请求时核对
form-data字段名,确保与代码中的file、nama_produk、harga完全一致
内容的提问来源于stack exchange,提问作者ZACK LAVIEV
相关产品推荐
相关产品推荐

