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

Spring Boot控制器GetMapping重定向仅显示链接未跳转问题求助

排查与解决你的GetMapping重定向失效问题

看起来你的Post请求能正常触发重定向,但同一个redirect:/comp/{Id}语句在GetMapping方法里却直接输出了字符串内容,没有执行跳转逻辑,我来帮你梳理几个最可能的原因和解决办法:

1. 检查控制器类的注解(最常见坑点)

如果这个GetMapping所在的控制器类用的是@RestController而非@Controller,那所有方法的返回值都会被默认当作@ResponseBody处理——Spring会直接把你返回的"redirect:/comp/" + Id字符串作为响应体返回给浏览器,不会触发视图解析器的重定向逻辑。

而你的Post请求所在的控制器应该是用了@Controller注解,所以才能正常跳转。解决办法分两种:

  • 把该控制器类的@RestController改成@Controller;
  • 如果需要保留类的REST特性,就把方法返回值改成ModelAndView来触发重定向:
@GetMapping("/opensignup/{id}")
public ModelAndView openSignUp(@PathVariable(value = "id") Long id) {
    Tournament comp = tournamentRepository.findOne(id);
    comp.setSignUpOpen(true);
    tournamentRepository.save(comp); // 提醒:你之前忘了保存修改后的对象到数据库!
    return new ModelAndView("redirect:/comp/" + id);
}

2. 排查请求拦截或修改逻辑

有没有可能项目里的拦截器、过滤器或AOP切面对GET请求做了特殊处理?比如有些拦截器会替换响应体、阻止重定向指令发送。可以暂时禁用这些拦截类,测试重定向是否恢复正常。

3. 验证路径拼接与参数有效性

虽然Post方法用了相同的拼接逻辑,但还是可以加日志确认细节:

@GetMapping("/opensignup/{id}")
public String openSignUp(@PathVariable(value = "id") Long id) {
    System.out.println("当前ID值:" + id);
    String redirectUrl = "redirect:/comp/" + id;
    System.out.println("生成的重定向路径:" + redirectUrl);
    // 其他业务代码
    return redirectUrl;
}

查看控制台输出的路径是否符合预期(比如redirect:/comp/123),同时确认id参数没有出现空值或格式异常。

4. 排除浏览器缓存或请求方式问题

浏览器可能会缓存GET请求的响应,导致看不到最新结果。可以尝试清除缓存、用隐私模式访问,或者确认你是通过GET方式请求的/opensignup/{id}(比如地址栏直接输入、<a>标签跳转),而非误以POST方式调用该接口。

5. 确认重定向目标路径的有效性

虽然你说Post方法能正常跳转,但还是可以核对/comp/{id}对应的控制器是否正确映射:

@GetMapping("/comp/{id}")
public String showTournamentDetail(@PathVariable("id") Long tournamentId) {
    // 业务逻辑
    return "tournament-detail"; // 返回正确的视图名称
}

确保路径拼写、PathVariable参数名称完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:30:18