Mavenプラグインのswaggercodegenによって生成されるインターフェイスでの「デフォルト」の実装は避けたいと思います。たとえば、petstore swaggerの場合: http://petstore.swagger.io/v2/swagger.json
私はmavenプラグインでインターフェースを生成します:
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.2.3</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>./src/main/resources/swagger/api.yml</inputSpec>
<language>spring</language>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<interfaceOnly>true</interfaceOnly>
<Java8>true</Java8>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
メソッドのデフォルトの実装でPetApi.Javaのようなインターフェースを生成します:
default ResponseEntity<Void> addPet(@ApiParam(value = "Pet object that needs to be added to the store" ,required=true ) @Valid @RequestBody Pet body) {
// do some magic!
return new ResponseEntity<Void>(HttpStatus.OK);
}
避けたい
ResponseEntity<Void> addPet(@ApiParam(value = "Pet object that needs to be added to the store" ,required=true ) @Valid @RequestBody Pet body);
それは可能ですか?
2020年3月の更新:
新しいOpenAPIツールによると
openapi-generator
spring
のオプションがあります(language
は非推奨です。generatorName
を使用してください)
skipDefaultInterface
https://github.com/OpenAPITools/openapi-generator/blob/master/docs/generators/spring.md
「春」の言語では、「Java8」パラメータは、デフォルトのインターフェースの使用を通知するためと、Java8の一般的な使用を通知するための両方に使用されます。 Java8日付ライブラリが使用される場合。
関連チケット:
https://github.com/swagger-api/swagger-codegen/issues/8045
https://github.com/swagger-api/swagger-codegen/issues/5614
同じプラグインの2つの実行の構成を解決しました。 1つはモデルクラスのみを生成する構成(Java8 = trueおよびdateLibrary = Java8-localdatetime)で、もう1つはAPIインターフェイスのみを生成する構成(Java = falseおよびdateLibraryは空)です。
<plugin>
<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.8</version>
<executions>
<execution>
<id>gera-api-model</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/openapi-spec/openapi.yaml</inputSpec>
<language>spring</language>
<generateModels>true</generateModels>
<generateApis>false</generateApis>
<configOptions>
<dateLibrary>Java8-localdatetime</dateLibrary>
<Java8>true</Java8>
</configOptions>
</configuration>
</execution>
<execution>
<id>gera-api-interface</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/openapi-spec/openapi.yaml</inputSpec>
<language>spring</language>
<generateModels>false</generateModels>
<generateApis>true</generateApis>
<configOptions>
<Java8>false</Java8>
</configOptions>
</configuration>
</execution>
</executions>
<configuration>
<inputSpec>${project.basedir}/src/main/openapi-spec/openapi.yaml</inputSpec>
<language>spring</language>
<output>${project.build.directory}/generated-sources</output>
<apiPackage>br.com.acme.myproject.api</apiPackage>
<modelPackage>br.com.acme.myproject.model</modelPackage>
<library>spring-mvc</library>
<generateApiDocumentation>false</generateApiDocumentation>
<generateModelDocumentation>false</generateModelDocumentation>
<generateSupportingFiles>false</generateSupportingFiles>
<generateApiTests>false</generateApiTests>
<generateModelTests>false</generateModelTests>
<configOptions>
<bigDecimalAsString>true</bigDecimalAsString>
<serializableModel>true</serializableModel>
<reactive>false</reactive>
<interfaceOnly>true</interfaceOnly>
</configOptions>
</configuration>
<dependencies>
<dependency>
<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-generators</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
</plugin>
注:プラグインのバージョン「v3」を使用しています。
Swagger codegenからフォークされたプロジェクトで<Java8> false </ Java8>を使用することで、これらのデフォルトのメソッドを回避することができました: https://github.com/OpenAPITools/openapi-generator
私のために働く例:
<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>${maven.multiModuleProjectDirectory}/api/target/generated/swagger-api-spec/swagger.json</inputSpec>
<language>spring</language>
<library>spring-boot</library>
<skipValidateSpec>true</skipValidateSpec>
<generateSupportingFiles>true</generateSupportingFiles>
<configOptions>
<sourceFolder>src/gen/Java/main</sourceFolder>
<Java8>false</Java8>
<dateLibrary>Java8</dateLibrary>
<interfaceOnly>false</interfaceOnly>
<groupId>com.company.groupid</groupId>
<artifactId>${project.artifactId}</artifactId>
<artifactVersion>${project.version}</artifactVersion>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>