Swagger 2.0を使用すると、Java.util.Currency
クラスが個別の定義として生成されました。しかし、OpenAPI 3.0を生成すると、swagger-coreがそれをプロパティとして生成するという問題が発生します。
私たちはf.eを持っています。このクラス:
import Java.util.Currency;
public class Wrapper {
private Currency currency;
}
このコードから、次のプラグイン構成でopenapi仕様を生成します。
<plugin>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>2.0.9</version>
<configuration>
<outputFileName>openapi</outputFileName>
<outputFormat>YAML</outputFormat>
<outputPath>....</outputPath>
<resourcePackages>...</resourcePackages>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>resolve</goal>
</goals>
</execution>
</executions>
</plugin>
これが生成されると、次のコンポーネント定義になります。
components:
schemas:
Wrapper:
type: "object"
properties:
currency:
type: object
properties:
currencyCode:
type: string
defaultFractionDigits:
type: integer
format: int32
numericCode:
type: integer
format: int32
displayName:
type: string
symbol:
type: string
次に、次のプラグインを使用して別のプロジェクトでクラスを生成します。
クラスを生成するためのコードは、このopenapi仕様を形成します。
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>openapi-generation</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec>
<language>Java</language>
<library>jersey2</library>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<booleanGetterPrefix>is</booleanGetterPrefix>
<dateLibrary>threetenbp</dateLibrary>
<import-mappings>
Currency=Java.util.Currency
</import-mappings>
</configOptions>
<generateApis>false</generateApis>
<generateApiDocumentation>false</generateApiDocumentation>
<generateModelTests>false</generateModelTests>
<generateModelDocumentation>false</generateModelDocumentation>
</configuration>
</execution>
</executions>
</plugin>
これにより、WrapperCurrency
という名前のクラスが作成されます。 --import-mappings
オプションはプロパティであり、schema
ではないため、機能していないようです。これは、通貨が個別のスキーマ定義として生成される場合に機能します。
Java.util.Currency
がスキーマとして生成されるようにプロパティに注釈を付ける方法はありますか?次のようなもの:
components:
schemas:
Wrapper:
type: "object"
properties:
currency:
$ref: "components/schemas/Currency"
Currency:
type: object
properties:
currencyCode:
type: string
defaultFractionDigits:
type: integer
format: int32
numericCode:
type: integer
format: int32
displayName:
type: string
symbol:
type: string
または、--import-mappings
オプションをオブジェクトではなくプロパティにバインドする方法はありますか?
回避策を検討することもできます。通貨フィールドに注釈@Schema(ref = "Currency")
を追加すると、プラグインはプロパティの生成をスキップします。残念ながら、Currencyクラスのスキーマ定義も生成されません。
components:
schemas:
Wrapper:
type: object
properties:
currency:
$ref: '#/components/schemas/Currency'
とにかくJava.util.Currency
にマッピングし直しているので、それがあなたにとって問題であるかどうかはわかりません。しかし、そうである場合は、別のハックがあります。静的ファイルに部分的なスキーマ(通貨定義のみ)を提供し、生成されたスキーマ(openapiFilePath
パラメーター)とマージするようにプラグインを構成できます。
プラグイン構成:
<plugin>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>2.0.9</version>
<configuration>
...
<openapiFilePath>src/main/resources/currency.yaml</openapiFilePath>
...
</configuration>
...
</plugin>
currency.yaml:
components:
schemas:
Currency:
type: object
properties:
currencyCode:
type: string
defaultFractionDigits:
type: integer
format: int32
numericCode:
type: integer
format: int32
displayName:
type: string
symbol:
type: string
それはハックだと私は知っていますが、他に選択肢がない場合は...