1. 問題を見つける
Knife4Jを利用する際にバージョンアップを行ったが、新しいKnife4JではSpringfoxのメンテナンスをやめ、文書仕様としてSpringDocを使用した プロジェクトをspringdocを使用するように移行した際に、エンティティクラスリスト(swagger models)が手動で不足していることが判明エンティティ クラスが維持されており、コントローラーから返されたエンティティのみがリストに表示されるため、バグの修正に着手しました。
2. 問題を解決する
1. 公式ドキュメントに従ってモデルを追加します
@Bean
open fun openAPI(): OpenAPI {
val docConfig = voidConfiguration.docConfig
val info = OpenAPI()
.info(Info()
.contact(Contact()
.name(Meta.ADMINISTRATOR)
.email("xxx")
.url("xx")
)
.title(docConfig.title)
.version(Meta.VERSION)
.description(docConfig.description)
.termsOfService("xxxx")
.license(License().name("Apache 2.0").url("xxx"))
)
//官方文档从此处添加models/schemas
val components = Components()
components.addSchemas("测试资源", Schema<SystemResource>())
info.components(components)
return info
}
2. 追加が完了した後、有効になっていないことが判明しました。
/doc.html にアクセスするときにエンティティ クラス リストを追加すると、手動で追加されたエンティティ クラスがないことがわかります。
3. コールチェーンに従って検索を開始します
AbstractOpenApiResource クラスで構成呼び出しが見つかりました
if (springDocConfigProperties.isRemoveBrokenReferenceDefinitions())
this.removeBrokenReferenceDefinitions(openAPI);
4. 公式ドキュメントに従って設定を変更します。
springdoc.remove-壊れた参照定義 |
|
壊れた参照定義の削除を無効にします。 壊れた参照定義の削除を無効にする |
追加した後、プロジェクトを再起動すると、手動で追加したエンティティ クラスがすでにリストに含まれていることを確認できます。
3. お金を節約する
springboot で springdoc を使用してエンティティ クラスを追加すると、リストにソリューションが表示されません
application.yml に 構成を追加します
springdoc:
remove-broken-reference-definitions: false