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

Spring Boot重定向跳转Controller报405错误,Thymeleaf页面无法渲染问题

问题根因分析

  • 405状态码对应请求方法不匹配:Spring MVC中redirect:前缀触发的是客户端重定向,浏览器会自动以GET方法请求重定向后的地址,而你的/greetingCustomer接口仅配置了@PostMapping只支持POST请求,因此直接被拦截返回405。
  • 你之前在JSP环境逻辑可正常运行,大概率是之前用的是服务端转发forward:而非重定向redirect:,服务端转发会复用原请求的方法、参数,所以POST请求转发到POST接口不会触发方法不匹配问题。

可用解决方案

方案1:调整目标接口的请求方法支持

把GreetingService中的@PostMapping("/greetingCustomer")修改为同时支持GET和POST请求,适配重定向后的GET请求:

@Controller
public class GreetingService {
    // 同时支持GET、POST请求
    @RequestMapping(path = "/greetingCustomer", method = {RequestMethod.GET, RequestMethod.POST})
    public String greetCustomer(@SessionAttribute("user")Customer customer, Model model) throws IOException {
        System.out.println("A new user " + customer.getName() + " is trying to request a quote");
        model.addAttribute("person",customer.getName());
        // 若service是Thymeleaf模板无需额外逻辑,可直接返回视图名"service",省略二次重定向
        return "service";
    }
}

方案2:将客户端重定向改为服务端内部转发

如果不需要对外暴露/greetingCustomer路径,直接把跳转前缀从redirect:改为forward:,服务端内部转发会复用原POST请求的参数和方法,不会触发浏览器新的GET请求:
修改SavingUser类中userRegistration方法的返回值:

// 原代码 return "redirect:/greetingCustomer"; 替换为
return "forward:/greetingCustomer";

方案3:简化跳转逻辑

greetCustomer方法仅做了Session属性读取和模型赋值,你可以直接把这部分逻辑合并到/service对应的GET接口中,省略多余的中间跳转步骤,降低逻辑复杂度。

额外注意事项

  • 如果service.html是静态模板没有对应Controller接口,需检查Spring MVC的视图解析器前缀、后缀配置是否正确,确保路径可以正常映射到模板文件。
  • @SessionAttributes声明的属性要在业务流程结束后调用SessionStatus.setComplete()主动清理,避免不必要的内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:57:02