Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
Swagger 的优势
支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。
提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。
Swagger使用的注解及其说明:
@Api:用在类上,说明该类的作用。 @ApiOperation:注解来给API增加方法说明。 @ApiImplicitParams : 用在方法上包含一组参数说明。 @ApiImplicitParam:用来注解来给方法入参增加说明。 参数: ·paramType:指定参数放在哪个地方 ··header:请求参数放置于Request Header,使用@RequestHeader获取 ··query:请求参数放置于请求地址,使用@RequestParam获取 ··path:(用于restful接口),请求参数的获取:@PathVariable ··body:(不常用) ··form(不常用) ·name:参数名 ·dataType:参数类型 ·required:参数是否必须传(true | false) ·value:说明参数的意思 ·defaultValue:参数的默认值 @ApiResponses:用于表示一组响应 @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息 ——code:数字,例如400 ——message:信息,例如"请求参数异常!" ——response:抛出异常的类 @ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候) @ApiModelProperty:描述一个model的属性
SpringBoot中Maven引入:
<!-- Swagger --> <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>
修改Controller增加注解:
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @Api(value = "用户管理类") @Controller public class SwController { @ApiOperation(value = "修改用户密码", notes = "根据用户id修改密码") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "userId", value = "用户ID", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "password", value = "旧密码", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "newPassword", value = "新密码", required = true, dataType = "String") }) @PostMapping("/hellosw") @ResponseBody public String hello(Model model, @RequestParam("userId") String userId, @RequestParam("password") String password, @RequestParam("newPassword") String newPassword) { return userId + "-" + password + "-" + newPassword; } }
配置类,用于指定扫描那些接口
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; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class Swagger2Conf { @Bean public Docket getUserDocket() { ApiInfo apiInfo = new ApiInfoBuilder().title("用户管理")// api标题 .description("用户管理相关接口描述")// api描述 .version("1.0.0")// 版本号 .build(); return new Docket(DocumentationType.SWAGGER_2)// 文档类型(swagger2) .apiInfo(apiInfo)// 设置包含在json ResourceListing响应中的api元信息 .select()// 启动用于api选择的构建器 .apis(RequestHandlerSelectors.basePackage("com.example.demo.swagger"))// 扫描接口的包 .paths(PathSelectors.any())// 路径过滤器(扫描所有路径) .build(); } }
启动后访问:
http://localhost:8080/swagger-ui.html
我们甚至可以直接在线就行测试
END
推荐您阅读更多有关于“ springboot 在线文档 微服务 swagger swagger2 ”的文章
Java小强
未曾清贫难成人,不经打击老天真。
自古英雄出炼狱,从来富贵入凡尘。
发表评论: