【Swagger】Springboot中集成Swagger2.0

一、前言

Swagger是一個強大的API文檔工具,使用Swagger可以輕鬆的將後端API的請求條件、所需參數、名稱等告知前端的開發人員,可以說是前後端進行溝通的橋樑;在本篇博客中就來介紹一下在Springboot中如何集成Swagger2.0,從而來幫助我們更好的進行開發工作。

二、使用前的準備

在Springboot中集成Swagger2.0,就需要準備Swagger2.0的相關依賴,在這裏以Maven項目管理工具來介紹相關的使用,首先我們想要到線上Maven倉庫中選取相關的依賴,所需要的依賴文件如下:

		<!--Swagger版本 2.9.2-->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.9.2</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.9.2</version>
		</dependency>

三、正式進行開發工作

在項目中引入相關的依賴以後,我們就可以在項目中使用Swagger來對API進行註解說明了,首先我們來創建Swagger的一個配置類,如下所示:

@Configuration
@EnableSwagger2   // 啓動Swaggger2的註解
public class commonConfig {	

	@Value("${swagger.config.basePackage}")
	private String basePackage;
	
	@Value("${swagger.config.title}")
	private String title;	
	
	@Value("${swagger.config.description}")
	private String description;
		
	@Value("${swagger.config.version}")
	private String version;
	
	@Bean
	public Docket createRestApi() {
		return new Docket(DocumentationType.SWAGGER_2)	//指定API類型爲swagger2
				.apiInfo(apiInfo())						//用於定義API文檔的相關信息
				.select()//
				.apis(RequestHandlerSelectors.basePackage(basePackage)) //指定controller層包名
				.paths(PathSelectors.any())				//應用於所有的controller
				.build();
	}
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()//
				.title(title)				//API文檔的標題
				.description(description)	//關於這個文檔作用的描述
				.version(version)			//設置當前API文檔的版本號
				.build();
	}
}

由於我是在SpringBoot的配置文件(application.yml)中,進行了相關參數的配置,具體的配置如下:

swagger:
    config:
        basePackage: com.learn.controller
        title: Wechat Login API Document.
        description: Provide wechat login relasted interface.
        version: 1.0

完成了以上的工作以後,我們就可以在進行API開發的時候使用了,先來介紹controller層中的使用,直接上controller層的代碼:

@RestController
@Api(value = "WechatLoginController", tags = { "微信登錄服務API" })
public class WechatLoginController {
	@Autowired
	private WechatLoginService wechatLoginService;
	
	@Value("${web.backend.redirectUrl}")
	private String webCallbackUrl;
		
	@CrossOrigin
	@RequestMapping(value = "/wechat/login", method = RequestMethod.GET)
	@ApiOperation(value = "構建請求授權URL")
	@ApiImplicitParam(name = "redirect_url", value = "發起微信登錄的前端URL", required = true, paramType = "query", dataType = "String")
	public ResponseEntity<String> weChatLogin(@RequestParam("redirect_url") String redirect_url) {
		String takenUrl = wechatLoginService.createWechatAuthorizeUrl(redirect_url);
		return ResponseEntity.ok(takenUrl);
	}
}

接下來介紹Model層的使用,直接上代碼:

@Data
@ApiModel(value="WechatUser",description="微信用戶信息實體類")
public class WechatUser implements Serializable {

	private static final long serialVersionUID = 1L;
	@ApiModelProperty(value="id",required=true)
	private String id;
	@ApiModelProperty(value="微信用戶openId",required=true)
	private String openid; 
	@ApiModelProperty(value="微信用戶暱稱",required=true)
	private String nickname; 
	@ApiModelProperty(value="微信頭像地址",required=true)
	private String headimgurl;
	@ApiModelProperty(value="用戶性別1:男性|2:女性|0:未知",required=true)
	private String sex; 
	@Override
	public String toString() {
		return "openid=" + openid 
				+ "&nickname=" + nickname 
				+ "&headimgurl=" + headimgurl
				+ "&sex="+sex;
	}
}

經常要用到的註解如下:

@Api---用在類文件上,一般用於controller層
@ApiOperation---用於方法上,一般用於controller層中的API方法
@ApiImplicitParam---用於方法上,用於對API參數進行標註
@ApiImplicitParams---用於方法上,用於對API參數進行標註,適應於多個參數的情況,使用如下:
@ApiImplicitParams({
			@ApiImplicitParam(...),
			@ApiImplicitParam(...),
			@ApiImplicitParam(...) 
			})
@ApiModel---用於類上,一般用於model層
@ApiModelProperty---用於實體類中的屬性上

下面這一組關於註解的詳細說明,來源於網絡,參考博客:swagger2註解使用教程

@Api:用在請求的類上,表示對類的說明
    tags="說明該類的作用,可以在UI界面上看到的註解"
    value="該參數沒什麼意義,在UI界面上也看到,所以不需要配置"

@ApiOperation:用在請求的方法上,說明方法的用途、作用
    value="說明方法的用途、作用"
    notes="方法的備註說明"

@ApiImplicitParams:用在請求的方法上,表示一組參數說明
    @ApiImplicitParam:用在@ApiImplicitParams註解中,指定一個請求參數的各個方面
        name:參數名
        value:參數的漢字說明、解釋
        required:參數是否必須傳
        paramType:參數放在哪個地方
            · header --> 請求參數的獲取:@RequestHeader
            · query --> 請求參數的獲取:@RequestParam
            · path(用於restful接口)--> 請求參數的獲取:@PathVariable
            · body(不常用)
            · form(不常用)    
        dataType:參數類型,默認String,其它值dataType="Integer"       
        defaultValue:參數的默認值

@ApiResponses:用在請求的方法上,表示一組響應
    @ApiResponse:用在@ApiResponses中,一般用於表達一個錯誤的響應信息
        code:數字,例如400
        message:信息,例如"請求參數沒填好"
        response:拋出異常的類

@ApiModel:用於響應類上,表示一個返回響應數據的信息
            (這種一般用在post創建的時候,使用@RequestBody這樣的場景,
            請求參數無法使用@ApiImplicitParam註解進行描述的時候)
    @ApiModelProperty:用在屬性上,描述響應類的屬性

啓動項目,訪問對應的鏈接,如:http://xxxxx:port/swagger-ui.html,顯示如下界面:
在這裏插入圖片描述

四、注意

由上圖可以看出,我們雖然在model層的實體類上添加了相應的註解,但是並沒有顯示,出現這個問題的原因是因爲雖然在實體類上進行了註解,但是必須在controller層中使用@requestBody註解或者返回的數據類型中包含註解的實體類纔可以顯示,由於我寫的API中沒有滿足這樣的條件,所以沒有顯示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章