【问题标题】:IlllegalStateException when I add @Bean to main class当我将@Bean 添加到主类时出现 IllegalStateException
【发布时间】:2021-12-27 07:43:39
【问题描述】:

当我将它添加到我的应用程序类时

@Bean
HiddenHttpMethodFilter hiddenHttpMethodFilter() {
    return new HiddenHttpMethodFilter();
}

我的应用程序无法启动并出现此错误:

2021-11-16 08:11:08.950 ERROR 70458 --- [main] os.boot.SpringApplication:应用程序运行失败

org.springframework.beans.factory.BeanDefinitionStoreException: 无法解析配置类 [com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication];嵌套异常是 java.lang.IllegalStateException: Failed to introspect annotated methods on class com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:64) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.6.jar:2.5.6] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.6.jar:2.5.6] 在 com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication.main(LearningSpringBootApplication.java:12) ~[main/:na] 原因:java.lang.IllegalStateException:无法自省 com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication 类上的注释方法 在 org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:162) ~[spring-core-5.3.12.jar:5.3.12] 原因:java.lang.IllegalStateException:无法自省 com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication 类上的注释方法

在 org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:403) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:326) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207) ~[spring-context-5.3.12.jar:5.3.12] 在 org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175) ~[spring-context-5.3.12.jar:5.3.12] ...省略了13个常用框架 原因:java.lang.IllegalStateException:无法从 ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@22d8cfe0] 内省类 [com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication] 原因:java.lang.IllegalStateException:无法从 ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@22d8cfe0] 内省类 [com.paulcarron.learningspringboot.learningspringboot.LearningSpringBootApplication]

在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:481) ~[spring-core-5.3.12.jar:5.3.12] 在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:455) ~[spring-core-5.3.12.jar:5.3.12] 在 org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:151) ~[spring-core-5.3.12.jar:5.3.12] ...省略了18个常用框架 引起:java.lang.NoClassDefFoundError: javax/servlet/Filter 在 java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] 引起:java.lang.NoClassDefFoundError: javax/servlet/Filter

在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) ~[na:na] 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) ~[na:na] 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) ~[na:na] 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676) ~[na:na] 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] 在 java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na] 在 java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3334) ~[na:na] 在 java.base/java.lang.Class.getDeclaredMethods(Class.java:2446) ~[na:na] 在 org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.12.jar:5.3.12] ...省略了20个常用框架 引起:java.lang.ClassNotFoundException:javax.servlet.Filter 引起:java.lang.ClassNotFoundException: javax.servlet.Filter

在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) ~[na:na] 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) ~[na:na] 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) ~[na:na] ...省略了51个常用框架

任务“:LearningSpringBootApplication.main()”执行失败。 进程 'command '/usr/local/Cellar/openjdk/16.0.1/libexec/openjdk.jdk/Contents/Home/bin/java'' 以非零退出值 1 结束

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

这是什么意思,我该如何解决?

【问题讨论】:

  • 必须是publicprotected。请添加完整的堆栈跟踪,而不仅仅是一个 sn-p。但是,您甚至不需要此过滤器,因为它已由 Spring Boot 注册(或者实际上是 Spring Boot 中的 OrderedHiddenHttpMethodFilter。尽管在较新的版本中,这可能会被禁用,而是将 spring.mvc.hiddenmethod.filter.enabled=true 添加到您的 application.properties 以拥有它开启。
  • 抱歉,添加了完整的堆栈跟踪。那么OrderedHiddenHttpMethodFilter 会自动注册吗?
  • 是的,但如果你有更新的版本,它可能需要一个属性(见评论)(它被禁用,因为大多数人使用 Spring Boot 用于基于 REST 的微服务,这个过滤器只需要 HTML 表单正在提交(因为您的浏览器仅支持 GET/POST)。

标签: java spring-boot illegalstateexception


【解决方案1】:

spring.mvc.hiddenmethod.filter.enabled=true 添加到application.properties 以将其打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2015-07-18
    相关资源
    最近更新 更多