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

Spring MVC 返回 500 Internal Server Error:數據庫有數據但頁面不顯示的排查思路

     編輯:程式設計綜合問答

現象

控制器方法:

@RequestMapping("/getdata")
@ResponseBody
public HashMap getFirstpageData(Pager pager) {
    PageMyBatis list = firstPageBS.search(pager);
    HashMap params = new HashMap();
    params.put("Rows", list.getResult());
    params.put("Total", list.getTotalCount());
    return params;
}

瀏覽器報 500,無具體錯誤信息。

排查清單

  1. 查看完整堆棧:控制台/日誌文件(catalina.out、localhost.yyyy-mm-dd.log)必有根因(NPE、SQL 異常、序列化失敗等)。
  2. 檢查 Service/DAO 層:firstPageBS.search 是否拋異常,MyBatis Mapper XML SQL 是否正確,參數映射是否匹配。
  3. 分頁對象 Pager:前端傳參名(page、rows)與後端屬性名是否一致,@RequestParam 是否漏標。
  4. 序列化問題:返回 HashMap 含非序列化對象(如 PageMyBatis 實例),建議構建純 POJO DTO 或 Map 且值為基本類型/集合/POJO。
  5. 數據庫連接池:連接泄漏導致獲取超時,檢查 Druid/HikariCP 配置與 close() 調用。

快速定位技巧

// 在 Controller 臨時加 try-catch 打印堆棧
try {
    PageMyBatis list = firstPageBS.search(pager);
    ...
} catch (Exception e) {
    e.printStackTrace(); // 控制台直接見根因
    return errorMap;
}

最佳實踐

  • 統一異常處理:@ControllerAdvice + @ExceptionHandler 返回結構化錯誤碼,避免 500 白屏。
  • 日誌框架(Logback/SLF4J)記錄關鍵參數與耗時。
  • 單元測試覆蓋 Service 層,隔離 Controller 驗證。

總結

500 無提示 ≠ 無錯誤,**必看後端日誌**。優先排查 Service/DAO 異常、參數綁定、序列化三大塊。

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