OpenApi 3 codegen java如何实现
有一个openapi yml文件,其中包含一个简单的get请求和响应,从这个yml生成下面的java文件(以及其他文件) 这些java文件应该如何使用? 如何连接到生成的文件中 可以简单地将生成的main和controller类复制到主源代码树中,但这似乎不是正确的方法 ---编辑--- 在生成的控制器类中,如何覆盖接口ExampleApi中存在的默认响应?无需修改生成的控制器类并将其包含在VCS中 ---编辑--- build.gradle.ktsOpenApi 3 codegen java如何实现,java,spring-boot,gradle,openapi,openapi-generator,Java,Spring Boot,Gradle,Openapi,Openapi Generator,有一个openapi yml文件,其中包含一个简单的get请求和响应,从这个yml生成下面的java文件(以及其他文件) 这些java文件应该如何使用? 如何连接到生成的文件中 可以简单地将生成的main和controller类复制到主源代码树中,但这似乎不是正确的方法 ---编辑--- 在生成的控制器类中,如何覆盖接口ExampleApi中存在的默认响应?无需修改生成的控制器类并将其包含在VCS中 ---编辑--- build.gradle.kts ... openApiGenerate {
...
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;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.context.request.NativeWebRequest;
导入java.util.Optional;
@控制器
@RequestMapping(${openapi.basic.base路径:})
公共类ExampleApiController实现ExampleApi{
私有最终NativeWebRequest请求;
@org.springframework.beans.factory.annotation.Autowired
公共示例ApicController(NativeWebRequest请求){
this.request=请求;
}
@凌驾
公共可选getRequest(){
返回可选。不可用(请求);
}
}
您需要告诉gradle编译这些文件,不需要复制它们
将包含生成文件的路径添加到项目的sourceset
。大概是这样的:
sourceSets {
main {
java {
srcDir("$buildDir/generated")
}
}
}
生成的类已经是源集的一部分,但是如何自定义请求的响应?在生成的控制器类中,如何覆盖接口ExampleApi中存在的默认响应?您可以扩展生成的控制器,或者告诉生成器仅创建接口并实现接口。通过仅生成接口并自行实现控制器解决了此问题。我如何告诉openapi使用我的实现而不是它创建的实现?现在,我只是手动编辑生成的文件以添加interfacethere的实现,在中有一个
interfaceOnly
config选项。
sourceSets {
main {
java {
srcDir("$buildDir/generated")
}
}
}