プロジェクトは GitHub にホストされています:y0ngb1n/spring-boot-samples、スターやフォークを歓迎します 😘
Swagger は「ストッキング兄」とも呼ばれ、プログラマーがコードを書きながらインターフェースドキュメントを生成できるとされています。
Swagger 2 依存関係の追加#
pom.xml
に Swagger 2 に必要な依存関係を追加します:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
Swagger の Java 設定の追加#
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
Swagger アノテーションの説明#
Swagger はアノテーションを通じてこのインターフェースがドキュメントを生成することを示します。これにはインターフェース名、リクエストメソッド、パラメータ、返却情報などが含まれます。
@Api
:クラス全体を修飾し、Controller の役割を説明します@ApiOperation
:クラスのメソッド、またはインターフェースを説明します@ApiParam
:単一のパラメータの説明@ApiModel
:オブジェクトを使用してパラメータを受け取ります@ApiProperty
:オブジェクトを受け取る際に、オブジェクトのフィールドを説明します@ApiResponse
:HTTP レスポンスの 1 つの説明@ApiResponses
:HTTP レスポンス全体の説明@ApiIgnore
:この API を無視するためにこのアノテーションを使用します@ApiImplicitParam
:1 つのリクエストパラメータ@ApiImplicitParams
:複数のリクエストパラメータ
これらは最も一般的に使用されるアノテーションです。
具体的な他のアノテーションについては、こちらを参照してください:https://github.com/swagger-api/swagger-core/wiki/Annotations
さらに詳しくは Swagger アノテーションドキュメントを参照してください。
Controller、Model を追加して効果をテストする#
@Api(value = "ユーザー管理", description = "ユーザー情報の「追加、削除、検索、更新」操作")
@RestController
@RequestMapping(path = "/sample/users")
public class UserController {
private static Map<Long, UserModel> users = Collections.synchronizedMap(new HashMap<>());
@ApiOperation(value = "ユーザーリスト")
@GetMapping(path = "/")
public List<UserModel> getUserList() {
return new ArrayList<>(users.values());
}
@ApiOperation(value = "ユーザー作成", notes = "Userオブジェクトに基づいてユーザーを作成します")
@ApiImplicitParam(name = "user", value = "ユーザー詳細エンティティ", required = true, dataTypeClass = UserModel.class)
@PostMapping(path = "/")
public UserModel createUser(@RequestBody UserModel user) {
users.put(user.getId(), user);
return user;
}
@ApiOperation(value = "ユーザー詳細情報", notes = "IDに基づいてユーザーの詳細情報を取得します")
@ApiImplicitParam(name = "id", value = "ユーザーID", required = true, dataType = "Long")
@GetMapping(path = "/{id}")
public UserModel getUser(@PathVariable Long id) {
return users.get(id);
}
@ApiOperation(value = "ユーザー詳細情報の更新", notes = "IDを指定して更新オブジェクトを指定し、User情報に基づいてユーザー詳細情報を更新します")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "ユーザーID", required = true, dataTypeClass = Long.class),
@ApiImplicitParam(name = "user", value = "ユーザー詳細エンティティ", required = true, dataTypeClass = UserModel.class)
})
@PutMapping(path = "/{id}")
public UserModel updateUser(@PathVariable Long id, @RequestBody UserModel user) {
UserModel updateUser = users.get(id);
updateUser.setName(user.getName());
updateUser.setAge(user.getAge());
updateUser.setEmail(user.getEmail());
users.put(id, updateUser);
return updateUser;
}
@ApiOperation(value = "ユーザー削除", notes = "IDを指定してオブジェクトを削除します")
@ApiImplicitParam(name = "id", value = "ユーザーID", required = true, dataType = "Long")
@DeleteMapping(path = "/{id}")
public String deleteUser(@PathVariable Long id) {
users.remove(id);
return "success";
}
}
@Data
@ApiModel(value = "ユーザーモデル", description = "ユーザー詳細情報エンティティクラス")
public class UserModel {
@ApiModelProperty(value = "ユーザーID")
private Long id;
@ApiModelProperty(value = "名前", allowableValues = "y0ngb1n, tony")
private String name;
@ApiModelProperty(value = "年齢", allowableValues = "range[1, 120]")
private Integer age;
@ApiModelProperty(value = "メール")
private String email;
}
この時点でプロジェクトを起動して Swagger 2 が正常に統合されているかを検証できます。プロジェクトを起動すると、ログに Swagger が私たちにアクセスエンドポイント /v2/api-docs
を追加したことが表示されます:
...
2019-12-28 22:19:53.880 INFO 11935 --- [main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
...
ブラウザで http://localhost:8080/v2/api-docs
にアクセスすると、返される結果は JSON の文字列であり、可読性は非常に低いことがわかります。幸いなことに、Swagger 2 は私たちに視覚的なインタラクティブインターフェース SwaggerUI を提供してくれます。次に、一緒に試してみましょう。
Swagger UI 依存関係の追加#
上記と同様に、pom.xml
に Swagger UI に必要な依存関係を追加します:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
追加が完了したら、プロジェクトを再起動し、ブラウザで http://localhost:8080/swagger-ui.html
にアクセスすると、以下のような効果が見られます:
これで Swagger の統合が成功しました。さらに高度な操作については、ドキュメントや以下の参考リンクを見てさらに探求してください。学習を楽しんでください!
🔗️ 参考リンク#
- https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api
- https://www.tutorialspoint.com/spring_boot/spring_boot_enabling_swagger2.htm
- http://blog.didispace.com/tags/Swagger/
- https://www.ibm.com/developerworks/cn/java/j-using-swagger-in-a-spring-boot-project/index.html
- https://mp.weixin.qq.com/s/EYnL7T0yOgNXYIrBWBg8hg
- https://github.com/dyc87112/swagger-butler
- https://github.com/SpringForAll/spring-boot-starter-swagger
- https://blog.csdn.net/lilyssh/article/details/82944507