You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC重定向后无法加载视图问题求助

问题分析与解决

从你的描述和代码来看,核心问题出在AJAX请求的重定向处理逻辑上,我来一步步拆解:

为什么会出现这个现象?

你是通过发送带JSON请求体的POST请求调用/register接口——这本质是AJAX请求,而非普通的表单提交。当服务器返回redirect:login时,这个重定向指令是发给AJAX请求本身的,AJAX会自动去请求/login(所以你能看到控制台打印"Login page"),但它不会主动通知浏览器进行页面跳转,因此浏览器停留在原来的页面,不会加载login.jsp。

而直接访问localhost:8080/login是普通的HTTP GET请求,服务器返回视图解析后的login.jsp,浏览器自然能正常渲染。

解决方案

方案1:让前端处理跳转(推荐,符合前后端分离思路)

修改register方法的返回值,不再返回重定向,而是返回一个包含跳转指令的JSON响应,让前端JS负责页面跳转:

@RequestMapping(value = "/register", method = RequestMethod.POST, consumes = "application/json; charset=UTF-8")
@ResponseBody
public Map<String, String> register(@RequestBody Customer customer) {
    registrationService.registerCustomer(customer);
    Map<String, String> response = new HashMap<>();
    response.put("redirect", "/login");
    return response;
}

然后在前端AJAX请求的成功回调里,处理跳转:

// 假设你用jQuery发送AJAX
$.ajax({
    url: "/register",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify(yourCustomerData),
    success: function(data) {
        if (data.redirect) {
            window.location.href = data.redirect;
        }
    }
});

方案2:如果是普通表单提交,修正重定向路径

如果你其实是想用普通表单提交(不是AJAX),那要检查重定向的路径写法:把return "redirect:login"改成return "redirect:/login"——用绝对路径避免相对路径带来的解析问题:

@RequestMapping(value = "/register", method = RequestMethod.POST, consumes = "application/json; charset=UTF-8")
public String register(@RequestBody Customer customer) {
    registrationService.registerCustomer(customer);
    // 用绝对路径重定向
    return "redirect:/login";
}

另外,普通表单提交的话,consumes = "application/json; charset=UTF-8"可能不太合适,因为表单默认的Content-Type是application/x-www-form-urlencoded,如果是这种情况,你可能需要调整@RequestBody为@ModelAttribute或者去掉consumes属性。

为什么返回ModelAndView("login")也没用?

因为同样的道理,AJAX请求接收了ModelAndView解析后的login.jsp内容,但不会主动替换当前浏览器页面,只是把内容存在AJAX的响应里,所以你看不到页面变化。

内容的提问来源于stack exchange,提问作者Kacper Leśniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:23:11