Spring Boot控制器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

