天天看點

java使用原生swagger_java內建swagger

概覽:

java內建Swagger

Swagger-UI的使用

Springboot跨域請求的通路解決

Swagger 是一個規範和完整的架構,用于生成、描述、調用和可視化 RESTful 風格的 Web 服務。本文主要介紹了在 Spring Boot 添加 Swagger 支援, 生成可自動維護的 API 文檔。

1 . POM檔案概覽:

org.springframework.boot

spring-boot-starter-parent

1.5.8.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-freemarker

io.springfox

springfox-swagger2

2.6.1

io.swagger

swagger-annotations

1.5.13

2 . 在Application同目錄下建立Swagger2的配置檔案 Swagger2.java

@Configuration

@EnableSwagger2

public class Swagger2 {

@Bean

public Docket config() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.useDefaultResponseMessages(false)

.select()

.apis(RequestHandlerSelectors.basePackage("com.yl.swagger.controller"))

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("這個标題")

.contact(new Contact("yl", "47.95.196.183/esileme", "[email protected]"))

.build();

}

}

.apis(RequestHandlerSelectors.basePackage("com.pxx.xxx.controller")) 指定了 Swagger 的掃描包名, 假如不指定此項, 在 Spring Boot 項目中, 會生成 base-err-controller 的 api 接口項。

配置好swagger後,在項目中通路 ip:prot/v2/api-docs 即可通路生成文檔的json結構,如(http://localhost:8080/v2/api-docs)可以看到,會出現一大串Json字元串。

java使用原生swagger_java內建swagger

具體可參考Swagger官方示例。

3 . Swagger-UI配置

Swagger掃描解析得到的是一個json文檔,對于使用者不太友好。下面介紹swagger-ui,它能夠友好的展示解析得到的接口說明内容。

從github 上擷取其所有的 dist 目錄下東西放到需要內建的項目裡,本文放入 resource/static/swagger 目錄下。

修改swagger/index.html檔案,預設是從連接配接http://petstore.swagger.io/v2/swagger.json擷取 API 的 JSON,這裡需要将url值修改為http://{ip}:{port}/{projectName}/api-docs的形式,{}中的值根據自身情況填寫,其實也就是步驟二中的json位址,我的是http://localhost:8080/v2/api-docs。

因為swagger-ui項目都是靜态資源,restful形式的攔截方法會将靜态資源進行攔截處理,是以要對springboot進行靜态資源攔截的處理。

下一步,在代碼中調用dist目錄下的index.html檔案,即可通路到接口文檔說明了。

java使用原生swagger_java內建swagger

4 . springboot添加freemaker模闆引擎

在預設的templates檔案夾中建立welcome.ftl 内容如下:

Hello,${name}.歡迎閱讀《${bookTitle}》

建立一個controller hellocontroller

@Controller

@RequestMapping("/test")

public class HelloController {

@RequestMapping("")

public Object test(ModelMap map) {

System.err.println("cnm");

map.put("name", "yl");

map.put("bookTitle", "bookTitle");

return "welcome";

}

}

打開浏覽器,通路http://localhost:8080/test 即可通路welcome頁面。

在通路index.html的時候,會提示跨域請求沒有權限的問題,在Application中添加

@Bean

public CorsFilter corsFilter() {

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

source.registerCorsConfiguration("/**", buildConfig());

return new CorsFilter(source);

}

private CorsConfiguration buildConfig() {

CorsConfiguration corsConfiguration = new CorsConfiguration();

corsConfiguration.addAllowedOrigin("*");

corsConfiguration.addAllowedHeader("*");

corsConfiguration.addAllowedMethod("*");

return corsConfiguration;

}

即可。

備忘:

Swagger-UI本質上是一個寫好的html靜态頁面,我們隻需要将我們提供的接口寫入index.html中,會給我們的接口資料渲染成一個html頁面。

Swagger-UI會查找出所有寫的請求位址,并顯示出來,如我們定義了一個/test 接口,它會把這個接口給顯示出來。