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

Spring MVC 跳轉頁面並傳遞 JSON:移除 @ResponseBody 使用 ModelAndView

     編輯:程式設計綜合問答

現狀:Controller 方法加 @ResponseBody 直接返回 Map 序列化為 JSON 顯示在當前頁,無法跳轉到新頁面 B 並展示數據。

解決方案:返回視圖名 + 模型數據

  1. 移除 @ResponseBody。
  2. 返回 ModelAndView 或 String (視圖名)。
  3. 將 JSON 數據放入 Model / ModelMap / ModelAndView。

方式一:ModelAndView (推薦)

@RequestMapping("/saleout/precheck")
public ModelAndView precheckStoreInForm(HttpServletRequest request, SaleOut saleout, PageInfo sopg) {
    List<SaleOut> results = service.query(saleout, sopg);
    List<SaleOut> ls = new ArrayList<>(results);

    Map<String, Object> data = new HashMap<>();
    data.put("rows", ls);
    data.put("total", ls.size());

    ModelAndView mav = new ModelAndView("pageB");  // 視圖名 pageB.jsp
    mav.addObject("jsonData", data);               // 模型鍵值
    return mav;
}

方式二:String 返回視圖名 + Model 參數

@RequestMapping("/saleout/precheck")
public String precheck(Model model, HttpServletRequest request, SaleOut saleout, PageInfo sopg) {
    // ... 查詢邏輯 ...
    model.addAttribute("jsonData", data);
    return "pageB";  // 視圖解析器解析為 pageB.jsp
}

頁面 B (pageB.jsp) 接收渲染

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<script>
var jsonData = ${jsonData};  // JSTL 直接輸出對象,需確保無 XSS 風險
// 或用 Jackson 序列化
var jsonData = <%= new ObjectMapper().writeValueAsString(jsonData) %>;
console.log(jsonData.rows);
</script>

AJAX 場景區分

  • 若為 AJAX 請求:保留 @ResponseBody 返回 JSON,前端 JS 回調處理跳轉/渲染。
  • 若為普通表單提交/超鏈接:移除 @ResponseBody,走視圖解析流程。

核心原理

@ResponseBody 表示「直接寫入 HTTP Response Body」,適用於 REST API。
無註解時,返回值視為視圖名,模型數據由 ViewResolver 渲染模板 (JSP/Thymeleaf/FreeMarker)。

根據請求類型選擇:頁面跳轉用視圖解析,API 用 @ResponseBody。

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