問題描述: 在使用若依分離版框架開發過程中,前端使用POST請求向后端傳遞數據,后端卻接收到了NULL值。
前端代碼:
//修改訂單狀態 export function updatorderstatus(id,status){ const data={ id, status } return request({ url:"/business/orderinfo/updatestate", method:"post", data:data }) }
前端請求數據截圖: (此處應包含前端請求數據的截圖)
后端代碼 (原代碼):
立即學習“前端免費學習筆記(深入)”;
@ApiOperation("訂單管理-修改訂單狀態") @ApiImplicitParams({ @ApiImplicitParam(name="id", value = "主鍵id", required = true, dataType = "Integer"), @ApiImplicitParam(name="status", value = "狀態0進行1結束", required = true, dataType = "integer") }) @PostMapping("/updatestate") public AjaxResult updateState(Integer id, Integer status) { System.out.println("更改訂單編號:" + id + "n"); System.out.println("更改訂單狀態:" + status + "n"); // ... (其余代碼) }
后端打印結果截圖: (此處應包含后端打印結果的截圖,顯示id和status為null)
問題分析: 后端使用 Integer id, Integer status 接收參數,在處理POST請求時,spring Boot 默認情況下無法正確解析請求體中的json數據到這些參數。
解決方案: 修改后端代碼,使用 @RequestBody 注解將請求體中的JSON數據綁定到一個對象上。
修改后的后端代碼:
@ApiOperation("訂單管理-修改訂單狀態") @PostMapping("/updatestate") public AjaxResult updateState(@RequestBody OrderStatusdtO orderStatusDTO) { System.out.println("更改訂單編號:" + orderStatusDTO.getId() + "n"); System.out.println("更改訂單狀態:" + orderStatusDTO.getStatus() + "n"); if (orderStatusDTO.getId() == null) { return AjaxResult.error("輸入主鍵id"); } if (orderStatusDTO.getStatus() == null) { return AjaxResult.error("輸入狀態"); } BorderInfo borderInfo = new BorderInfo(); borderInfo.setId(orderStatusDTO.getId()); borderInfo.setStatus(orderStatusDTO.getStatus()); System.out.println("更改訂單狀態:" + borderInfo.toString() + "n"); orderInfoService.update(borderInfo); return AjaxResult.success(); }
新增OrderStatusDTO類:
public class OrderStatusDTO { private Integer id; private Integer status; // getters and setters }
通過使用 @RequestBody 注解和創建一個 OrderStatusDTO 類來接收前端傳遞的JSON數據,后端就能正確解析數據,避免 NULL 值的問題。 請確保前端發送的JSON數據與 OrderStatusDTO 的字段名一致。 同時,檢查前端的 request 函數是否正確設置了 headers,例如 Content-Type: application/json。
此方案比原先的@RequestParam方案更符合restful API的設計規范,也更清晰地處理了POST請求的body數據。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END