首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

程式碼審查:ID 獲取失敗拋出異常,建議增加空值防護

     編輯:程式設計綜合問答

問題程式碼片段(圖片推測)


// 疑似 Spring MVC Controller
@GetMapping("/detail")
public String detail(@RequestParam Long id) {
    Entity e = service.getById(id);  // 若 id 不存在,可能回傳 null
    model.addAttribute("entity", e); // 後續視圖存取 e.field 拋 NPE
    return "view";
}

風險

  • service.getById(id) 找不到資料回傳 null。
  • 視圖模板 ${entity.field} 渲染時拋 NullPointerException,導致 500 錯誤頁面。

修正方案


@GetMapping("/detail")
public String detail(@RequestParam Long id, Model model, RedirectAttributes ra) {
    Entity e = service.getById(id);
    if (e == null) {
        ra.addFlashAttribute("error", "資料不存在");
        return "redirect:/list";
    }
    model.addAttribute("entity", e);
    return "detail";
}

通用防護原則

  1. Controller 層驗證參數合法性(@Valid, BindingResult)。
  2. Service 層回傳 Optional<T> 或拋出自訂異常 EntityNotFoundException。
  3. 全域異常處理 @ControllerAdvice 統一回傳 404 頁面或 JSON 錯誤。
  4. 視圖層使用安全導航 ${entity?.field} (Thymeleaf) / #if($entity)$entity.field#end (Velocity)。

原答案核心

「如果娶不到id你的方法就會報錯,建議判斷取id是否為空」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved