<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>3.0.0</version>
</dependency>
@Bean
public Docket createRestApi() {
List<Response> responses = new ArrayList<Response>() {{
add(new ResponseBuilder().code("201")
.description("建立成功")
.build());
add(new ResponseBuilder().code("202")
.description("請求已受理,正在進一步處理")
.build());
add(new ResponseBuilder().code("204")
.description("請求已成功,但無需更多描述資訊")
.build());
add(new ResponseBuilder().code("400")
.description("請求參數錯誤或格式不正确")
.build());
add(new ResponseBuilder().code("401")
.description("Token 驗證失敗")
.build());
add(new ResponseBuilder().code("403")
.description("登入失敗或權限禁止")
.build());
add(new ResponseBuilder().code("417")
.description("參數格式不正确")
.build());
}};
return new Docket(DocumentationType.SWAGGER_2)
.securitySchemes(Collections.singletonList(securitySchemes()))
.securityContexts(Collections.singletonList(securityContexts()))
.globalResponses(HttpMethod.GET, responses)
.globalResponses(HttpMethod.POST, responses)
.globalResponses(HttpMethod.PUT, responses)
.globalResponses(HttpMethod.HEAD, responses)
.globalResponses(HttpMethod.DELETE, responses)
.select()
.apis(RequestHandlerSelectors.basePackage("wlgzs.exam.controller"))
.build()
.apiInfo(apiInfo());
}
/**
* 認證方式使用密碼模式
*/
private SecurityScheme securitySchemes() {
GrantType grantType = new ResourceOwnerPasswordCredentialsGrant("/oauth/token");
return new OAuthBuilder()
.name("Authorization")
.grantTypes(Collections.singletonList(grantType))
.scopes(Arrays.asList(scopes()))
.build();
}
/**
* 設定 swagger2 認證的安全上下文
*/
private SecurityContext securityContexts() {
return SecurityContext.builder()
.securityReferences(Collections.singletonList(new SecurityReference("Authorization", scopes())))
.operationSelector((each) -> true)
.build();
}
/**
* 允許認證的scope
*/
private AuthorizationScope[] scopes() {
AuthorizationScope authorizationScope = new AuthorizationScope("all", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return authorizationScopes;
}
/**
* 添加摘要資訊
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API線上考試文檔")
.build();
}