概述
一切参数说明,参考官方API文档:http://docs.swagger.io/swagger-core/current/apidocs/index.html?io/swagger/annotations
在实体和API注释这块,有些注释不一定在页面上表现,但是接口返回的数据上全部都有返回。
Swagger2出自SpringFOX, 官网:https://github.com/springfox/springfox,而与https://swagger.io/不同,所以在https://swagger.io/上是找不到Swagger2的开发文档。
在Swagger2的GitHUb页面上也没提供相关的详细文档,不过可以参考示例代码库https://github.com/springfox/springfox-demos进行参考。
不过下面这些网址还能找到关于Swagger的先关API文档,并且兼容Swagger2的:
http://docs.swagger.io/swagger-core/current/apidocs/index.html
https://github.com/swagger-api/swagger-core(旧版示例)
https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X#quick-annotation-overview
https://github.com/swagger-api/swagger-samples(新版示例)
下面是收集的一些常用注解,如果要更多的用法,可以参照上面官网提供的文档:
名称 | 描述 |
---|---|
@Api | 将类标记为Swagger资源。 |
@ApiImplicitParam | 表示API操作中的单个参数。 |
@ApiImplicitParams | 允许多个ApiImplicitParam对象列表的包装器。 |
@ApiModel | 提供有关Swagger型号的其他信息。 |
@ApiModelProperty | 添加和操作模型属性的数据。 |
@ApiOperation | 描述针对特定路径的操作或通常的HTTP方法。 |
@ApiParam | 为操作参数添加额外的元数据。 |
@ApiResponse | 描述操作的可能响应。 |
@ApiResponses | 允许多个ApiResponse对象列表的包装器。 |
@Authorization | 声明在资源或操作上使用授权方案。 |
@AuthorizationScope | 描述OAuth2授权范围。 |
@ResponseHeader | 表示可以作为响应的一部分提供的头。 |
示例代码:
SwaggerConfig
配置
import com.google.common.base.Predicate; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.ResponseEntity; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import static com.google.common.base.Predicates.or; import static springfox.documentation.builders.PathSelectors.regex; /** * SwaggerConfig */ @Configuration @EnableSwagger2 public class SwaggerConfig { @Value("${server.servlet-path}") private String pathMapping; private ApiInfo initApiInfo() { ApiInfo apiInfo = new ApiInfo("XXX项目 Platform API",//大标题 initContextInfo(),//简单的描述 "1.0.0",//版本 "服务条款", "后台开发团队",//作者 "The Apache License, Version 2.0",//链接显示文字 "http://www.baidu.com"//网站链接 ); return apiInfo; } private String initContextInfo() { StringBuffer sb = new StringBuffer(); sb.append("REST API 设计在细节上有很多自己独特的需要注意的技巧,并且对开发人员在构架设计能力上比传统 API 有着更高的要求。") .append("<br/>") .append("本文通过翔实的叙述和一系列的范例,从整体结构,到局部细节,分析和解读了为了提高易用性和高效性,REST API 设计应该注意哪些问题以及如何解决这些问题。"); return sb.toString(); } @Bean public Docket restfulApi() { System.out.println("http://localhost:8080" + pathMapping + "/swagger-ui.html"); return new Docket(DocumentationType.SWAGGER_2) .groupName("RestfulApi") // .genericModelSubstitutes(DeferredResult.class) .genericModelSubstitutes(ResponseEntity.class) .useDefaultResponseMessages(true) .forCodeGeneration(false) .pathMapping(pathMapping) // base,最终调用接口后会和paths拼接在一起 .select() .paths(doFilteringRules()) .build() .apiInfo(initApiInfo()); } /** * 设置过滤规则 * 这里的过滤规则支持正则匹配 * @return */ private Predicate<String> doFilteringRules() { return or( regex("/hello.*"), regex("/vehicles.*") ); } }
Controller
的配置
import com.reachauto.hkr.cxn.swagger.bean.ChangeRentalShopParameter; import io.swagger.annotations.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import java.util.Date; @Api(value = "API - VehiclesController", description = "车辆模块接口详情") @RestController @RequestMapping("/vehicles") public class VehiclesController { private static Logger logger = LoggerFactory.getLogger(VehiclesController.class); @ApiOperation(value = "查询车辆接口", notes = "此接口描述xxxxxxxxxxxxx<br/>xxxxxxx<br>值得庆幸的是这儿支持html标签<hr/>", response = String.class) @ApiImplicitParams({ @ApiImplicitParam(name = "vno", value = "车牌", required = false, dataType = "string", paramType = "query", defaultValue = "辽A12345"), @ApiImplicitParam(name = "page", value = "page", required = false, dataType = "Integer", paramType = "query",defaultValue = "1"), @ApiImplicitParam(name = "count", value = "count", required = false, dataType = "Integer", paramType = "query",defaultValue = "10") }) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful — 请求已完成"), @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"), @ApiResponse(code = 401, message = "未授权客户机访问数据"), @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"), @ApiResponse(code = 500, message = "服务器不能完成请求")} ) @ResponseBody @RequestMapping(value = "", method = RequestMethod.GET) public ModelMap findVehicles(@RequestParam(value = "vno", required = false) String vno, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "count", required = false) Integer count) throws Exception { logger.info("http://localhost:8501/api/v1/vehicles"); logger.info("## {},{},{}", vno, page, count); logger.info("## 请求时间:{}", new Date()); ModelMap map = new ModelMap(); map.addAttribute("vno", vno); map.addAttribute("page", page); return map; } @ApiOperation(value = "根据车牌查询车辆", notes = "这种类型的查询是精确查询,其结果只有一条数据", response = String.class) @ApiImplicitParams({ @ApiImplicitParam(name = "vno", value = "车牌", required = false, dataType = "string", paramType = "path", defaultValue = "辽A12345") }) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful — 请求已完成"), @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"), @ApiResponse(code = 401, message = "未授权客户机访问数据"), @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"), @ApiResponse(code = 500, message = "服务器不能完成请求")} ) @ResponseBody @RequestMapping(value = "vno={vno}", method = RequestMethod.GET) public ModelMap getVno(@PathVariable(value = "vno") String vno) throws Exception { logger.info("http://localhost:8501/api/v1/vehicles/vno={}", vno); logger.info("## 请求时间:{}", new Date()); ModelMap map = new ModelMap(); map.addAttribute("vno", vno); return map; } @ApiOperation(value = "车辆位置查询接口", notes = "根据车牌查询车辆位置信息", response = String.class) @ApiImplicitParams({ @ApiImplicitParam(name = "vno", value = "车牌", required = false, dataType = "string", paramType = "path", defaultValue = "辽A12345") }) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful — 请求已完成"), @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"), @ApiResponse(code = 401, message = "未授权客户机访问数据"), @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"), @ApiResponse(code = 500, message = "服务器不能完成请求")} ) @ResponseBody @RequestMapping(value = "vno={vno}/location", method = RequestMethod.GET) public ModelMap getLocation(@PathVariable(value = "vno") String vno) throws Exception { logger.info("getLocation"); logger.info("## 请求时间:{}", new Date()); ModelMap map = new ModelMap(); map.addAttribute("vno", vno); return map; } @ApiOperation(value = "根据车辆id查询", notes = "精确查询,最常规的方式,支持POST和GET方式", response = String.class) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "id", required = false, dataType = "string", paramType = "path", defaultValue = "12344444") }) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful — 请求已完成"), @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"), @ApiResponse(code = 401, message = "未授权客户机访问数据"), @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"), @ApiResponse(code = 500, message = "服务器不能完成请求")} ) @ResponseBody @RequestMapping(value = "{id}", method = {RequestMethod.GET,RequestMethod.POST}) public ModelMap getById(@PathVariable(value = "id") String id) throws Exception { logger.info("http://localhost:8501/api/v1/vehicles/{}", id); logger.info("## 请求时间:{}", new Date()); ModelMap map = new ModelMap(); map.addAttribute("{RequestMethod.GET,RequestMethod.POST}", id); return map; }
@ApiOperation(value = "根据车辆id查询", notes = "精确查询,最常规的方式,支持POST和GET方式", response = String.class) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "id", required = false, dataType = "string", paramType = "path", defaultValue = "12344444") }) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful — 请求已完成"), @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"), @ApiResponse(code = 403, message = "服务器拒绝请求"), @ApiResponse(code = 401, message = "未授权客户机访问数据"), @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"), @ApiResponse(code = 500, message = "服务器不能完成请求")} ) @ResponseBody @RequestMapping(value = "{id}", method = {RequestMethod.DELETE}) public ModelMap delById(@PathVariable(value = "id") String id) throws Exception { logger.info("http://localhost:8501/api/v1/vehicles/{}", id); logger.info("## 请求时间:{}", new Date()); ModelMap map = new ModelMap(); map.addAttribute("RequestMethod.DELETE", id); return map; } @ApiOperation(value = "网点挂靠", notes = "嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻", response = String.class) @ApiResponses(value = { @ApiResponse(code = 200, message = "Successful — 请求已完成"), @ApiResponse(code = 400, message = "请求中有语法问题,或不能满足请求"), @ApiResponse(code = 401, message = "未授权客户机访问数据"), @ApiResponse(code = 404, message = "服务器找不到给定的资源;文档不存在"), @ApiResponse(code = 500, message = "服务器不能完成请求")} ) @ResponseBody @RequestMapping(value = "change_rentalshop", method = {RequestMethod.PUT,RequestMethod.PATCH}) public ModelMap changeRentalShop(@RequestBody ChangeRentalShopParameter parameter) throws Exception { logger.info("http://localhost:8501/api/v1/vehicles/change_rentalshop | {}", parameter); logger.info("## 请求时间:{}", new Date()); ModelMap map = new ModelMap(); map.addAttribute("网点挂靠", new Date()); return map; } }
Application
启动模块
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
示例代码输出的效果:
测试工程:https://github.com/easonjim/5_java_example/tree/master/swagger2test/test1
参考:
https://springframework.guru/spring-boot-restful-api-documentation-with-swagger-2/
https://gumutianqi1.gitbooks.io/specification-doc/content/tools-doc/spring-boot-swagger2-guide.html(以上内容部分转自此篇文章)
http://blog.csdn.net/xupeng874395012/article/details/68946676
http://blog.csdn.net/z28126308/article/details/71126677
http://blog.csdn.net/u014231523/article/details/76522486
http://blog.csdn.net/fanpeng1100/article/details/54016292
转载于:https://www.cnblogs.com/EasonJim/p/7519022.html
最后
以上就是迷人云朵为你收集整理的SpringFox Swagger2注解基本用法的全部内容,希望文章能够帮你解决SpringFox Swagger2注解基本用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复