swagger概述:
Swagger是一组围绕OpenAPI规范构建的开源工具,可帮助设计、构建、记录和使用REST API。简单说下,它的出现就是为了方便进行测试后台的restful形式的接口,实现动态的更新,当我们在后台的接口修改了后,swagger可以实现自动的更新,而不需要认为的维护这个接口进行测试。
swagger 常用注解
swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiParamImplicitL:一个请求参数
@ApiParamsImplicit 多个请求参数
步骤一:引入依赖包
<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>
步骤二:配置swagger2的基本信息(与启动类同包)
package com.sinotrans.api;
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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class MySwagger {
//swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包路径
.apis(RequestHandlerSelectors.basePackage("com.sinotrans.api.controller"))
.paths(PathSelectors.any())
.build();
}
//构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("使用 Swagger2 构建RESTful API")
//创建人
.contact(new Contact("yaofq", null, null))
//版本号
.version("1.0")
//描述
.description("用户信息管理以及机构信息管理接口文档")
.build();
}
}
通过@Configuration注解,表明它是一个配置类,@EnableSwagger2开启swagger2。
apiINfo()配置一些基本的信息。apis()指定扫描的包会生成文档。再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。
select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore指定的请求)。
swagger2实际使用案例
package com.sinotrans.api.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.sinotrans.api.constant.ResultDto;
import com.sinotrans.api.model.BaseUserinfoModel;
import com.sinotrans.api.service.BaseUserinfoManager;
import com.sinotrans.framework.orm.support.PagingInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@Api(value = "BaseUserInfoController", description = "用户信息管理")
@RestController
@RequestMapping("/user")
public class BaseUserInfoController {
@Autowired
BaseUserinfoManager baseUserinfoManager;
private static Logger logger = LoggerFactory.getLogger(BaseUserInfoController.class);
/**
* 取得所有的用户信息
*
* @return ResultDto
*/
@ApiOperation(value = "查询所有用户信息", notes = "", httpMethod = "GET",produces = "application/json;charset=UTF-8")
@GetMapping("/searchList")
public ResultDto getBaseUserInfoList() {
logger.info("BaseUserInfoController getBaseUserInfoList start!!!");
List<BaseUserinfoModel> list = null;
try {
list = baseUserinfoManager.getAll();
} catch (Exception e) {
// TODO: handle exception
logger.error("取得全部用户信息失败:" + e);
}
logger.info("BaseUserInfoController getBaseUserInfoList end,用户总数:" + list.size());
return ResultDto.success(list);
}
}
/**
* 根据用户id取得用户信息
*
* @param id
* @return ResultDto
*/
@ApiOperation(value = "查询用户信息", notes = "根据用户id查询用户", httpMethod = "GET",produces = "application/json;charset=UTF-8")
@ApiImplicitParam(name = "id", value = "用户id", required = true, dataType = "String")
@GetMapping("/selectById/{id}")
public ResultDto selectUserInfoById(@PathVariable String id) {
logger.info("BaseUserInfoController selectUserInfoById start!!!");
BaseUserinfoModel baseUserinfoModel = null;
try {
baseUserinfoModel = baseUserinfoManager.get(id);
} catch (Exception e) {
// TODO: handle exception
logger.error("根据id查询用户信息失败:" + e);
}
logger.info("BaseUserInfoController selectUserInfoById end,用户总数:" + baseUserinfoModel);
return ResultDto.success(baseUserinfoModel);
}
/**
* 分页查询用户信息
*
* @param currentPage
* 当期页
* @param pageSize
* 每页限制行数
* @return ResultDto
*/
@ApiOperation(value = "查询用户信息", notes = "分页查询查询用户信息", httpMethod = "GET",produces = "application/json;charset=UTF-8")
@ApiImplicitParams({
@ApiImplicitParam(name = "currentPage", value = "当期页", required = true, dataType = "String"),
@ApiImplicitParam(name = "pageSize", value = "每页限制行数", required = true, dataType = "String") })
@GetMapping("/searchListPage")
public ResultDto selectUserInfoPagingInfo(String currentPage, String pageSize) {
logger.info("BaseUserInfoController selectUserInfoPagingInfo start!!!");
String orderBy = "Id desc";
List<BaseUserinfoModel> list = null;
PagingInfo pagingInfo = new PagingInfo();
// List<FilterCondition> filterCond = new ArrayList<FilterCondition>();
// FilterCondition filterCondition = new FilterCondition();
try {
pagingInfo.setCurrentPage(Integer.valueOf(currentPage));
pagingInfo.setPageSize(Integer.valueOf(pageSize));
list = baseUserinfoManager.findByCondition(orderBy, pagingInfo, null);
} catch (Exception e) {
// TODO: handle exception
logger.error("分页查询失败:" + e);
}
logger.info("BaseUserInfoController selectUserInfoPagingInfo end,用户总数:" + list.size());
return ResultDto.success(list);
}
步骤四:查看ui界面
访问:http://[ip]:[端口]/swagger-ui.html
注意事项:
swagger要屏蔽某些controller或者requestMapping,只需在相应的类上或者方法上加@ApiIgnore