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

SpringBoot升级至3.2.1后POST请求报405 Method Not Allowed错误

解决SpringBoot 3.2.1中POST接口被识别为静态资源的问题

以下是针对你遇到问题的具体解决方案:

1. 调整Spring Security的CSRF配置

Spring Boot 3.x搭配的Spring Security 6.x默认开启CSRF保护,未携带CSRF Token的POST请求会被拦截,后续流程可能将请求导向静态资源处理器,最终返回405错误。

如果你的接口无需CSRF保护,可针对性关闭:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .csrf(csrf -> csrf.ignoringRequestMatchers("/init/messageSimulator"))
        .authorizeHttpRequests(auth -> auth
            .requestMatchers(HttpMethod.POST, "/init/messageSimulator").permitAll()
            // 其他授权规则
        );
    return http.build();
}

若需保留CSRF保护,需在Postman请求中携带有效Token(可通过GET请求获取后添加到请求头或参数中)。

2. 修正WebMvc静态资源映射逻辑

你当前将/**映射到静态资源的配置会覆盖所有请求路径,虽然控制器映射优先级更高,但POST请求因静态资源处理器不支持该方法,会触发405错误。建议修改为更精准的映射,并单独配置SPA路由 fallback:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 仅映射/static/**路径到静态资源
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }

    // 处理SPA路由:非接口、非静态资源的请求返回index.html
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/**")
                .setViewName("forward:/index.html");
    }
}

这样控制器的POST接口会被优先匹配,仅静态资源路径会被静态资源处理器处理。

3. 验证请求Content-Type与控制器映射

  • 确保Postman中POST请求的Content-Type与控制器方法的接收要求一致(比如application/json),否则Spring不会将请求路由到控制器。
  • 检查控制器的@PostMapping路径拼写是否完全匹配/init/messageSimulator,避免大小写或路径分隔符错误。

内容的提问来源于stack exchange,提问作者Eugen Gîrlescu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:42:51