Spring Bootとspringdoc-openapiでバージョン番号を表示

5 年以上前、2015 年前後でしたでしょうか、Spring Boot で API ドキュメントを生成する際は springfox を使用していました。

GitHub

Automated JSON API documentation for API's built with Spring…

しかし、2021 年ということもあり、springdoc-openapi を使用してみることにしました。

GitHub

Library for OpenAPI 3 with spring-boot. Contribute to spring…

既存の build.gradle の dependencies に追加するのみで API ドキュメントを生成できるようになります。

dependencies {
...
  implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.5.10'
...
}

しかし、デフォルトではバージョン情報が v0 と表示されます。

build.grade の version で設定しているバージョン番号を表示できるようにしてみます。しかし、そのやり方に関する公式情報を見つけられなかったため、正しいやり方かどうかはわかりません。

まず、application.yml に適当なパラメータを追加し、その値を build.gradle の version に設定します。

app:
  version: $project.version

続いて build.gradle に下記の記述を追記します。

processResources {
  filesMatching("**/application.yml") {
    expand(project.properties)
  }
}

最後に、適当な場所に Java のクラスファイルを作成します。Value アノテーションで application.yml のパラメータを取得し、それを OpenAPI の Info に設定します。

package hello.domain.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {

  @Value("${app.version}")
  private String version;

  @Bean
  public OpenAPI customOpenApi() {
    return new OpenAPI().info(new Info().title("OpenAPI definition").version(version));
  }

}

アプリケーションを起動して Swagger UI に接続するとバージョン番号が表示されるようになりました。