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

@EnableWebMvc搭配PUT请求与form-urlencoded参数引发异常问题

问题原因分析
  1. @EnableWebMvc的配置影响:添加该注解后,Spring Boot会禁用WebMvcAutoConfiguration自动配置类,完全采用原生Spring MVC的配置逻辑。
  2. 原生Spring MVC参数解析规则:原生Spring MVC默认仅对POST请求的application/x-www-form-urlencoded格式请求体做解析,并将参数存入request parameter map;对于PUT请求,默认不会处理这类格式的请求体,导致@RequestParam无法获取参数,抛出MissingServletRequestParameterException。
  3. Spring Boot自动配置的差异:WebMvcAutoConfiguration中默认注册了HttpPutFormContentFilter过滤器,该过滤器会拦截PUT/PATCH请求,将请求体中的form参数解析到request parameter map中,因此移除@EnableWebMvc后PUT请求能正常获取参数。
解决办法

办法一:手动注册HttpPutFormContentFilter

在Spring配置类中手动注册该过滤器,让PUT请求的form参数能被解析:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public HttpPutFormContentFilter httpPutFormContentFilter() {
        return new HttpPutFormContentFilter();
    }

    // 其他MVC定制配置...
}

办法二:改用@RequestBody接收参数

直接通过@RequestBody结合MultiValueMap接收PUT请求的form参数:

@PutMapping("/test3") 
public String test3(@RequestBody MultiValueMap<String, String> params){
    String id = params.getFirst("id");
    int k = Integer.parseInt(params.getFirst("k"));
    return id+","+k;
}

办法三:移除@EnableWebMvc,用WebMvcConfigurer定制配置

如果不需要完全接管Spring MVC配置,建议移除@EnableWebMvc,改用@Configuration+WebMvcConfigurer定制MVC规则,保留Spring Boot的自动配置(包括HttpPutFormContentFilter的自动注册):

@Configuration
public class WebConfig implements WebMvcConfigurer {

    // 在这里添加MVC定制逻辑,比如拦截器、视图解析器等...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:37:54