Spring Boot启动类加HiddenHttpMethodFilter的@Bean后报IllegalStateException如何解决?
错误原因
- 缺失web依赖:项目没有引入
spring-boot-starter-web启动器,Servlet相关的类(包括javax.servlet.Filter)都封装在这个启动器中,非web项目默认不会加载该类。 - 版本不兼容:如果使用的是Spring Boot 3.x及以上版本,该版本全面迁移到Jakarta EE,原
javax.servlet包全部替换为jakarta.servlet包,依赖javax.servlet.Filter的旧版本类会找不到对应类。 - 冗余的手动Bean注册:Spring Boot 2.3+已经内置了
HiddenHttpMethodFilter的自动配置,不需要手动编写@Bean注册,手动注册反而可能因为类路径匹配问题触发异常。
解决方案
- 检查web启动器依赖是否引入
Maven项目在pom.xml中添加如下配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Gradle项目在build.gradle中添加如下配置:
implementation 'org.springframework.boot:spring-boot-starter-web'
- 删除你手动编写的
HiddenHttpMethodFilter的@Bean注册代码,直接通过配置文件开启官方自动配置即可:
application.properties格式:
spring.mvc.hiddenmethod.filter.enabled=true
application.yml格式:
spring: mvc: hiddenmethod: filter: enabled: true
- 如果你使用Spring Boot 3.x版本,确保所有Spring相关组件的版本和Spring Boot版本匹配,不要手动指定低版本的spring-web等依赖,避免出现javax/jakarta包冲突。
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

