OpenAPI Generator生成应用启动失败:找不到NativeWebRequest类型Bean
解决OpenAPI Generator生成的Spring Boot应用启动时NativeWebRequest找不到的问题
问题原因
生成的RmaCasesApiController通过构造函数注入了NativeWebRequest,但Spring Boot默认不会将该类型注册为全局Bean——NativeWebRequest是请求作用域对象,通常应在控制器方法参数中直接获取,而非构造函数注入。
方案1:修改OpenAPI Generator配置(推荐,避免手动修改生成代码)
在openapi-generator-maven-plugin的configOptions中添加配置,让生成器采用Spring MVC标准的控制器构造逻辑,避免构造函数注入NativeWebRequest:
<configOptions> <useJakartaEe>true</useJakartaEe> <useSpringController>true</useSpringController> <interfaceOnly>false</interfaceOnly> <!-- 默认值为false,确保生成完整控制器实现 --> </configOptions>
执行mvn clean install重新生成代码后,控制器会改为在方法参数中获取NativeWebRequest,启动错误即可消除。
方案2:手动注册NativeWebRequest的请求作用域Bean
若不想修改生成配置,可添加一个配置类,注册请求作用域的NativeWebRequest Bean:
package com.example.clientapi.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.context.annotation.ScopedProxyMode; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.ServletWebRequest; import jakarta.servlet.http.HttpServletRequest; @Configuration public class WebRequestConfig { @Bean @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) public NativeWebRequest nativeWebRequest(HttpServletRequest request) { return new ServletWebRequest(request); } }
该配置会让Spring在每个请求上下文创建对应的NativeWebRequest实例,并通过代理注入控制器,解决Bean找不到的问题。
方案3:检查Spring Boot依赖兼容性
确保Spring Boot版本与OpenAPI Generator版本匹配:
- OpenAPI Generator 7.x对应Spring Boot 3.x(Jakarta EE),需在
pom.xml中引入兼容的Web Starter依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.2.0</version> <!-- 或其他兼容的3.x版本 --> </dependency>
内容的提问来源于stack exchange,提问作者p-brane
相关产品推荐
相关产品推荐

