首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringBoot不加载使用OpenAPI 3.0生成的控制器

SpringBoot不加载使用OpenAPI 3.0生成的控制器
EN

Stack Overflow用户
提问于 2020-05-26 20:05:03
回答 2查看 1K关注 0票数 0

我正在使用openapi-generator-maven-plugin生成代码。代码正在成功生成。但是spring boot并没有在上下文中加载生成的代码。我不知道为什么,因为我做了以下事情。

下面是我的插件配置:

代码语言:javascript
复制
<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>4.3.1</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/spec/SchoolAPIs.v1.yaml</inputSpec>
                <output>${project.build.directory}/server</output>
                <language>spring</language>
                <apiPackage>com.school.rest.controllers</apiPackage>
                <modelPackage>com.school.rest.generated.dtos</modelPackage>
                <supportingFilesToGenerate>ApiUtil.java</supportingFilesToGenerate>
                <library>spring-boot</library>
                <configOptions>
                    <java8>false</java8>
                    <dateLibrary>java8</dateLibrary>
                    <delegatePattern>true</delegatePattern>
                    <useBeanValidation>true</useBeanValidation>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

下面是我指定配置的主类:

代码语言:javascript
复制
@EnableSwagger2
@EnableAsync
@SpringBootApplication(exclude = SecurityAutoConfiguration.class, scanBasePackages = { "com.school.rest"})
@EnableJpaRepositories(basePackages = "com.school.rest.repository")
@Slf4j
public class SchoolAPIApplication implements CommandLineRunner {

    public static void main(String[] args) {
        ApplicationContext context = new SpringApplicationBuilder(SchoolAPIApplication.class)
                .registerShutdownHook(true).run(args);
        PlansApiController plansApiController = context.getBean(PlansApiController.class);
        log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>> {}", plansApiController);
    }

}

我不知道这里出了什么问题,我已经为这个问题挣扎了近2天。找不到丢失的是什么。

如果您有任何可用的解决方案,请告诉我。

更新:此调用产生以下error>

代码语言:javascript
复制
log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>> {}", plansApiController);

错误:

代码语言:javascript
复制
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type...

问候

EN

回答 2

Stack Overflow用户

发布于 2020-05-26 21:40:32

从我所看到的,你生成的包在启动时没有被扫描。我已经尝试在这里重现你的问题和解决方案,https://github.com/tinashehondo/notifications-api

代码语言:javascript
复制
<plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <version>4.0.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
                        <output>${project.build.directory}/api</output>
                        <language>spring</language>
                        <modelPackage>uk.co.tinashehondo.notifications.rest.model</modelPackage>
                        <apiPackage>uk.co.tinashehondo.notifications.rest.api</apiPackage>
                        <generateSupportingFiles>true</generateSupportingFiles>
                        <configOptions>
                            <java8>false</java8>
                            <dateLibrary>java8</dateLibrary>
                            <delegatePattern>true</delegatePattern>
                            <useBeanValidation>true</useBeanValidation>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

代码语言:javascript
复制
@SpringBootApplication(exclude = SecurityAutoConfiguration.class,
     scanBasePackages = { "uk.co.tinashehondo.notifications.rest"})
 public class App {
   public static void main(String[] args) {
    ApplicationContext context = new        SpringApplicationBuilder(App.class)
            .registerShutdownHook(true).run(args);
    NotificationApi notificationApiController =    context.getBean(NotificationApi.class);
    System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>> {}"+notificationApiController); //forgive sys.out here
}

}

输出

代码语言:javascript
复制
>>>>>>>>>>>>>>>>>>>>>>>>>>>>     {}uk.co.tinashehondo.notifications.rest.api.NotificationApiController@7b948f3e
票数 0
EN

Stack Overflow用户

发布于 2020-06-01 13:00:38

好吧,对我来说答案是这样的,

我之所以面临这个问题,是因为较低的spring-boot版本不支持从生成的接口读取数据。由于这个原因,代码生成器正在生成带有带有所有文档注释的接口的代码,但是它们不会被spring读取并添加到上下文中。

将我的spring版本从2.0.0升级到2.1.4,事情就解决了。张贴在这里供其他人参考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62021727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档