当前位置: 首页 > 知识库问答 >
问题:

OpenApi 3 codegen java如何实现

夹谷硕
2023-03-14

有一个openapi yml文件,其中包含一个简单的获取请求和响应,从这个yml中生成了下面的java文件(以及其他文件)。

这些java文件应该如何使用?如何连接到生成的文件中?

可以简单地将生成的main和controller类复制到主源代码树中,但这似乎不是正确的方法。

--编辑--

在生成的Controller类中,如何重写存在于接口示例Api中的默认响应?无需修改生成的Controller类并将其放在VCS中。

--编辑--

建筑格拉德尔。kts

...
openApiGenerate {
    generatorName.set("spring")

    inputSpec.set("$rootDir/specs/api-example.yml")
    outputDir.set("$buildDir/generated")

    apiPackage.set("com.example.openapi.generated.api")
    invokerPackage.set("com.example.openapi.generated.invoker")
    modelPackage.set("com.example.openapi.generated.model")

    configOptions.set(mapOf(
            "dateLibrary" to "java8"
    ))
    systemProperties.set(mapOf(
            "modelDocs" to "false"
    ))
}
...

这些课程应该做什么?

package com.example.openapi.generated.invoker;

import com.fasterxml.jackson.databind.Module;
import org.openapitools.jackson.nullable.JsonNullableModule;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.ExitCodeGenerator;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.openapi.generated.invoker", "com.example.openapi.generated.api" , "org.openapitools.configuration"})
public class OpenAPI2SpringBoot implements CommandLineRunner {

    @Override
    public void run(String... arg0) throws Exception {
        if (arg0.length > 0 && arg0[0].equals("exitcode")) {
            throw new ExitException();
        }
    }

    public static void main(String[] args) throws Exception {
        new SpringApplication(OpenAPI2SpringBoot.class).run(args);
    }

    static class ExitException extends RuntimeException implements ExitCodeGenerator {
        private static final long serialVersionUID = 1L;

        @Override
        public int getExitCode() {
            return 10;
        }

    }

    @Bean
    public WebMvcConfigurer webConfigurer() {
        return new WebMvcConfigurer() {
            /*@Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("*")
                        .allowedHeaders("Content-Type");
            }*/
        };
    }

    @Bean
    public Module jsonNullableModule() {
        return new JsonNullableModule();
    }

}

package com.example.openapi.generated.api;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.request.NativeWebRequest;
import java.util.Optional;

@Controller
@RequestMapping("${openapi.basic.base-path:}")
public class ExampleApiController implements ExampleApi {

    private final NativeWebRequest request;

    @org.springframework.beans.factory.annotation.Autowired
    public ExampleApiController(NativeWebRequest request) {
        this.request = request;
    }

    @Override
    public Optional<NativeWebRequest> getRequest() {
        return Optional.ofNullable(request);
    }

}

共有1个答案

潘飞英
2023-03-14

你需要告诉gradle编译这些文件,没有必要复制它们。

将包含生成文件的路径添加到项目的sourceset。大概是这样的:

sourceSets {
    main {
        java {
            srcDir("$buildDir/generated")
        }
    }
}
 类似资料:
  • 问题内容: 我在同一HTML页面上同时使用了javascript和jquery代码。由于某种原因,jQuery库正在阻止我的本机javascript代码正常工作。 我找到了此页面:jQuery No Conflict,它表明您可以使用jquery.noConflict将$释放回javascript。但是,我不确定该怎么做? 具体来说,我不确定如何正确执行此操作?Jquery代码在哪里,JS代码在哪

  • 问题内容: 我已经开发Web应用程序已有一段时间了,但是最近使用Comet服务器端推送技术对其进行了介绍,而我对该技术的理解还很不成熟。虽然链接http://www.zeitoun.net/articles/comet_and_php/start提供了两个使用PHP中无限循环的简单示例实现,但我想进一步了解上述方法的用途以及是否适合生产。专用彗星服务器如Meteor(http://meteorse

  • 异步读取 新建一个  ExcelModelListener 监听类出来,并且 继承 AnalysisEventListener 类 package com.zh.oukele.listener; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListen

  • 我正在编写一个新的板条箱,我希望它能与一个特征的任何实现(在另一个板条箱中定义)一起使用。该特性看起来如下所示: 我有自己的类型,但有时我只想不加修改地转发底层错误。我的本能是这样定义一个类型: 我看过其他几个crate,它们似乎通过使其(或等价物)泛型于错误类型本身,而不是特性实现来处理这一问题。当然,这是可行的,但是: 除非我们有了固有的关联类型,否则它要冗长得多。我的实际上实现了多个特性,每

  • myapp e/AndroidRuntime:致命异常:main java.lang.ClassCastException:com.domain.myapp.MainActivity@422FB8F0必须实现OnFragmentInteractionListener 我找不到任何地方如何实现这个OnFragmentInteractionListener??甚至在android sdk文档中也找不到

  • 问题内容: 我想实施一个。 我不想只使用,因为我必须实现大量的方法。 可以避免吗? 更具体的,我怎么能流,以及例如: 问题答案: JDK的标准实现是内部类,您不能直接实例化它。 相反,你可以使用,以及各种1,2种静态工厂方法来创建默认实现的实例。 使用分离器可能是最强大的方法,因为它可以让您懒惰地提供对象,同时如果您的源可以分为多个块,则还可以实现有效的并行化。 此外,如果需要实现自己的 有状态中

  • 问题内容: IObjectTest是具有单个布尔测试(对象o)方法的接口 FilteringIterator是Iterator的实现,该实现使用另一个Iterator和一个IObjectTest实例初始化:new FilteringIterator(myIterator,myTest)。然后,您的FilteringIterator将允许在“ myIterator”上进行迭代,但是会跳过所有未通过“

  • 问题内容: 我见过有人说python 中的对象具有O(1)成员资格检查。如何在内部实现它们以允许这样做?它使用哪种数据结构?该实现还有什么其他含义? 这里的每个答案都非常有启发性,但是我只能接受一个答案,因此,我将选择与原始问题最接近的答案。谢谢你的信息! 问题答案: 实际上,CPython的集合被实现为类似于带有伪值的字典(键是集合的成员)的字典,并且进行了一些优化,可以利用这种缺乏值的方式 因