參考自:https://blog.csdn.net/u014231523/article/details/54562695
1. POM引用相關依賴
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.4.0</version>
</dependency>
2. 創建swagger配置類
package com.xxx.xxx.core.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Configuration
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.sf.avcp.core"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("XXX平臺API文檔")
.description("XXX平臺API文檔")
.termsOfServiceUrl("http://yourTermsOfService.com")
.version("1.0")
.build();
}
}
啟動服務后,這時候可以查看以下地址
swagger會顯示已填寫的title,description等信息。
${port}為application.properties中設置的端口號(如果不設置,默認為8080)
http://${ip}:${port}/swagger-ui.html#/
3. 在自己的Controller添加相關的注解
- 原來的Controller類上使用的@controller,現在可以使用@RestController代替
- 方法的@ResponseBody可以不用寫了,因為版本在4.0.1之后的@RestController的注解接口上已經添加了。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
/**
* The value may indicate a suggestion for a logical component name,
* to be turned into a Spring bean in case of an autodetected component.
* @return the suggested component name, if any
* @since 4.0.1
*/
String value() default "";
}
常用的注解如下:
- @Api()用于類名
- @ApiOperation()用于方法名
- @ApiParam()用于參數說明
- @ApiModel()用于實體類
- @ApiModelProperty用于實體類屬性
更加詳細的含義可以參考官方說明wiki
這里會把相應包下的所有controller按類進行顯示。
我們看下一些例子(請忽略業務邏輯,只看注解)
- Get的例子
@RequestMapping("/hotline")
@RestController
@Api(tags = "熱點線路統計分析接口")
public class HotLineController {
@ApiResponses(value = { @ApiResponse(code = 500, message = "系統錯誤"),
@ApiResponse(code = 200, message = "0 成功,其它為錯誤") })
@ApiOperation(httpMethod = "GET", value = "獲取熱度前10條線路")
@RequestMapping(method = RequestMethod.GET, value = "/getTop10Lines")
public SimpleResponse<List<GroundHotLine>> getTop10Lines() {
//邏輯略
}
}
- Post的例子
@RequestMapping("/adas_alarm")
@RestController
@Api(tags = "ADAS告警接口")
public class AdasAlarmController {
@ApiResponses(value = { @ApiResponse(code = 500, message = "系統錯誤"),
@ApiResponse(code = 200, message = "0 成功,其它為錯誤") })
@ApiOperation(httpMethod = "POST", value = "查詢adas告警統計數據(司機緯度)")
@RequestMapping(method = RequestMethod.POST, value = "/querySummaryByDriver")
public SimpleResponse<Page<AdasAlarmSummaryByDriver>> querySummaryByDriver(
@RequestBody @ApiParam(value = "查詢參數", required = true) AdasAlarmDriverCond queryParams) {
//邏輯略
}
}
使用對象作為參數時,可以在對象上添加相應的注解,用戶頁面顯示
PS:這里還用到lombok.Data注解,省略Getter和Setter
- 參數for Post
import lombok.Data;
@Data
public class AdasAlarmDriverCond {
@ApiModelProperty(value = "司機名稱")
private String driverName;
@ApiModelProperty(value = "司機工號")
private String driverEmpCode;
// 是否支持分頁邏輯 目的用于分頁和豐分頁的區分
@ApiModelProperty(hidden = true)
private String pageFlag;
}
- 參數for說明required=true(用于Get)
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
@ApiModel(description="用戶對象user")
public class User {
@ApiModelProperty(value="用戶名",name="username")
private String username;
@ApiModelProperty(value="狀態",name="state",required=true)
private Integer state;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
如果在字段(如:state)上添加注釋
@ApiModelProperty(required=true)
那么在swagger前端上做調用/測試時就是必填(默認是false)