Spring Boot でSwagger を使う方法
Swaggerを使うにはbuild.gradleに以下2行を追加します。
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'io.springfox:springfox-swagger2:2.9.2' // 追加 implementation 'io.springfox:springfox-swagger-ui:2.9.2' // 追加 testImplementation 'org.springframework.boot:spring-boot-starter-test' }
コンフィグファイル作成
SwaggerConfig.java(ファイル名は任意)というファイルを作成します。
package jp.co.confrage; import javax.servlet.ServletContext; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.PathProvider; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.paths.RelativePathProvider; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 @EnableConfigurationProperties(SwaggerProperties.class) public class SwaggerConfig { @Bean public Docket doc() { return new Docket(DocumentationType.SWAGGER_2) .protocols(prop.getProtocols()) .pathProvider(pathProvider(cxt)) .apiInfo(apiInfo()) .select() .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("サンプル API") .description("説明です~") .version("1.0") .build(); } /* APIのベースパス */ private PathProvider pathProvider(ServletContext cxt) { return new RelativePathProvider(cxt) { @Override public String getApplicationBasePath() { return "/"; } }; } }
@EnableSwagger2アノテーションを忘れずにつけます。
必要に応じてSwaggerConfigに対するプロパティファイルを作成します。(特に不要ですが)
ここでは、SwaggerProperties.javaとします。
package jp.co.confrage; import java.util.HashSet; import java.util.Set; import org.springframework.boot.context.properties.ConfigurationProperties; import lombok.Data; @Data @ConfigurationProperties(prefix="swagger") public class SwaggerProperties { private String host = "localhost:8080"; private String protcol = "http"; private String basePath = "/"; /* APIプロトコルを取得 */ public Set<String> getProtocols() { Set<String> protocols = new HashSet<>(); protocols.add(protcol); return protocols; } }
コントローラー
GETとPOSTのRestControllerを作成します。
package jp.co.confrage; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController { @GetMapping(value = "/getMethod") public String get() { return "google"; } @PostMapping(value = "/postMethod") public String post() { return "yahoo"; } }
Spring Bootアプリケーションを実行して、http://localhost:8080/swagger-ui.htmlにアクセスすると、SwaggerのHTML画面が表示されます。
サンプルAPIの下にあるリンクをクリックするとapi-doc.jsonがダウンロードされます。
buid.gradleでapiclientを自動生成する
build.gradleのタスクを作成してswagger codegenよりsdkを自動生成することが可能です。
build.gradleに以下のタスクを追加します。
buildscript { ext { springBootVersion = '2.1.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("io.swagger:swagger-codegen:2.3.1") // これを追加する必要がある } } task generate(group:'swagger',description:'説明文を書きます'){ def in = file('apidoc/apidoc.json') def out = file('build/sdk') inputs.file(in) outputs.file(out) doLast{ def conf = new io.swagger.codegen.config.CodegenConfigurator(); conf.setInputSpec(in.path) conf.setOutputDir(out.path) conf.setLang('java') conf.setAdditionalProperties( 'apiPackage': "${project.group}.confrage.api.client".toString(), 'modelPackage':"${project.group}.confrage.api.model".toString(), 'invokerPackage':"${project.group}.confrage.api.invoker".toString(), 'groupId': project.group, 'artifactId': "${project.name}-sdk".toString(), 'artifactVersion': 1.0.0, 'library': 'resttemplate', 'dateLibrary': 'java8-localdatetime' ) } }
これでタスクを実行すればbuild配下にプロジェクトが生成されます。
springdoc-openapi
バージョン3からOpen APIと名称が変わったようです。springdoc-openapi-uiライブラリを使用してAPIドキュメントを生成します。
build.gradleに以下1行を追加します。
dependencies { implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.5.10' // .... }
Spring Bootアプリケーションを実行して、http://localhost:8080/swagger-ui.htmlにアクセスすると空のAPIドキュメント(Swagger UI)が表示されます。
applicaion.yml
パスの変更やSwagger UIの無効化など、いくつか設定変更することが出来ます。
springdoc: swagger-ui: path: /aaa.html
これで、http://localhost:8080/aaa.htmlでSwagger UIにアクセスできるようになります。
springdoc: api-docs: path: /hoge
JSONのパスを/hogeに変更します。http://localhost:8080/hogeでJSONにアクセスすることが出来るようになります。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント