Swagger Codegen で Spring のスタブサーバを作成する
Swagger ファイルからソースコードを生成することができる Swagger Codegen というツールがあります.
今回はこの Swagger Codegen を使い、Spring のスタブサーバを作成してみたいと思います.
Swagger Codegen のセットアップ
GitHub からクローンします.
$ git clone https://github.com/swagger-api/swagger-codegen.git
Maven ビルドします.
$ cd path/to/swagger-codegen
$ mvn package
modules/swagger-codegen-cli/target/swagger-codegen-cli.jar が生成されます.
Spring のスタブサーバ生成
Swagger ファイルからスタブサーバのソースコードを生成します.
$ java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate \
-i http://petstore.swagger.io/v2/swagger.json \
-l spring \
-o /Users/Daiki/Desktop/stubdemo
- -i: 入力する Swagger ファイルを指定します
- -l: 出力するスタブサーバの種類を指定します
- -o: 出力先ディレクトリを指定します
Swagger ファイルにはサンプルを使用しました.
スタブサーバの種類は色々指定できます.
Swagger-Codegen Template-Creator
デフォルトで生成されるプロパティファイルには server.port=-1 が設定されているので、好きな値に変更しましょう.
springfox.documentation.swagger.v2.path=/api-docs
server.contextPath=/v2
server.port=-1
spring.jackson.date-format=io.swagger.RFC3339DateFormat
spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
生成されたコードはステータスコードが全て 501 Not Implemented になっているので、今回は一律 200 OK にする変換を行いました.
$ export LANG=C
$ find . -type f | xargs sed -i '' 's/HttpStatus.NOT_IMPLEMENTED/HttpStatus.OK/g'
ステータスコードについては議論が行われたようですが、501 Not Implemented に終着したようです.
Change default generated status to NOT_IMPLEMENTED in controller
Spring プロジェクトを Maven ビルドします.
$ cd /path/to/spring-project
$ mvn package
target/swagger-spring-1.0.0.jar が生成されます.
スタブサーバ起動
java コマンドでスタブサーバを起動します.
$ java -jar target/swagger-spring-1.0.0.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE)
2019-02-01 17:18:53.409 INFO 41224 --- [ main] io.swagger.Swagger2SpringBoot : Starting Swagger2SpringBoot v1.0.0 on aa367474noMacBook-Air.local with PID 41224 (/Users/Daiki/Desktop/mockdemo/target/swagger-spring-1.0.0.jar started by Daiki in /Users/Daiki/Desktop/mockdemo)
2019-02-01 17:18:53.423 INFO 41224 --- [ main] io.swagger.Swagger2SpringBoot : No active profile set, falling back to default profiles: default
2019-02-01 17:18:53.703 INFO 41224 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@45283ce2: startup date [Fri Feb 01 17:18:53 JST 2019]; root of context hierarchy
2019-02-01 17:18:59.856 INFO 41224 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2019-02-01 17:18:59.895 INFO 41224 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-02-01 17:18:59.897 INFO 41224 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23
2019-02-01 17:19:00.159 INFO 41224 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/v2] : Initializing Spring embedded WebApplicationContext
・・・
2019-02-01 17:19:05.808 INFO 41224 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2019-02-01 17:19:05.822 INFO 41224 --- [ main] io.swagger.Swagger2SpringBoot : Started Swagger2SpringBoot in 14.535 seconds (JVM running for 15.742)
2019-02-01 17:20:30.145 INFO 41224 --- [nio-8080-exec-7] o.a.c.c.C.[Tomcat].[localhost].[/v2] : Initializing Spring FrameworkServlet 'dispatcherServlet'
http://localhost:8080/v2/swagger-ui.html で Swagger-UI にアクセスできます.
以上です.