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

使用@RequestBody接收JSON参数的Spring接口如何实现页面跳转?

问题根因与解决方案

核心原因

你遇到的无法跳转的问题和@RequestBody没有直接关系,核心是两个底层逻辑限制:

  • 你用了@RestController注解修饰控制器类,该注解等价于@Controller + @ResponseBody组合,所有接口方法的返回值都会直接作为响应体返回,不会走Spring MVC的视图解析器,自然无法触发页面跳转
  • 前端发起的是Ajax异步请求,就算后端返回跳转指令,浏览器默认只会接收响应内容,不会主动触发当前页面的跳转动作

最优解决方案(无需移除@RequestBody,改动量最小)

不需要修改现有的参数接收逻辑,只要调整返回结构,在前端Ajax回调中手动触发跳转即可:

后端接口调整

将接口返回值改为携带跳转地址的JSON结构:

@PostMapping("/saveMovBienes2") 
public Map<String, Object> saveMovBienes2(@RequestBody Request myRequest) {
    // 保留原有业务处理逻辑
    Map<String, Object> resp = new HashMap<>();
    resp.put("status", "success");
    // 替换为你实际需要跳转的页面路径
    resp.put("redirectPath", "${pageContext.request.contextPath}/目标页面路径");
    return resp;
}

前端Ajax请求调整

补充success回调逻辑,拿到后端返回的跳转地址后手动跳转:

$.ajax({
    type:'POST',                
    url:'${pageContext.request.contextPath}/saveMovBienes2',
    data:  JSON.stringify({ dni:dni, table:table, tipoMov:tipoMov}),
    dataType: "json",
    contentType: 'application/json',
    success: function(res) {
        if(res.status === 'success') {
            window.location.href = res.redirectPath;
        }
    }
})

误区澄清

网上说的「移除@RequestBody就能跳转」的方案,适用场景是普通表单同步提交+普通@Controller修饰的接口,和你当前Ajax提交JSON的场景完全不匹配,不需要为了跳转修改原有参数接收逻辑。


内容的提问来源于stack exchange,提问作者Juano Cataldo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:05