SpringBoot+Swagger整合API

Swagger:整合规范的api,有界面的操作,测试

1.在pom.xml加入swagger依赖

  1. <!--整合Swagger2配置类-->
  2. <dependency>
  3. <groupId>io.springfox</groupId>
  4. <artifactId>springfox-swagger2</artifactId>
  5. <version>2.9.2</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>io.springfox</groupId>
  9. <artifactId>springfox-swagger-ui</artifactId>
  10. <version>2.9.2</version>
  11. </dependency>

2.在application.yml开启swagger

  1. #引入swagger
  2. swagger:
  3. enable: true

  

3.配置SwaggerConfiguration.java

注意:@Value("${swagger2.basePackage:com.spingcloud.serviceconsumer.controller}") 添加扫描的api入口

  1. @Configuration
  2. @EnableSwagger2
  3. public class SwaggerConfiguration {
  4.  
  5. @Value("${swagger2.basePackage:com.spingcloud.serviceconsumer.controller}")
  6. private String swagger2BasePackage;
  7. @Value("${swagger2.title:系统API文档}")
  8. private String swagger2Title;
  9. @Value("${swagger2.api.version:2.0}")
  10. private String apiVersion;
  11.  
  12. @Bean
  13. public Docket createRestApi() {
  14.  
  15. //添加query参数start
  16. ParameterBuilder tokenPar = new ParameterBuilder();
  17. List<Parameter> pars = new ArrayList<Parameter>();
  18. // tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("query").required(true).build();
  19. pars.add(tokenPar.build());
  20. //添加query参数end
  21.  
  22. return new Docket(DocumentationType.SWAGGER_2)
  23. .apiInfo(apiInfo())
  24. .select().apis(RequestHandlerSelectors.basePackage(swagger2BasePackage))
  25. .paths(PathSelectors.any())
  26. .build()
  27. // .globalOperationParameters(pars)
  28. //添加验证
  29. // .securitySchemes(securitySchemes())
  30. // .securityContexts(securityContexts())
  31. //添加验证
  32. ;
  33.  
  34. }
  35.  
  36. private ApiInfo apiInfo() {
  37. return new ApiInfoBuilder()
  38. .title(swagger2Title)
  39. .version(apiVersion)
  40. .build();
  41. }
  42.  
  43. private List<ApiKey> securitySchemes() {
  44. List<ApiKey> apiKeyList= new ArrayList();
  45. apiKeyList.add(new ApiKey("token", "令牌", "header"));
  46. return apiKeyList;
  47. }
  48.  
  49. private List<SecurityContext> securityContexts() {
  50. List<SecurityContext> securityContexts=new ArrayList<>();
  51. securityContexts.add(
  52. SecurityContext.builder()
  53. .securityReferences(defaultAuth())
  54. .forPaths(PathSelectors.regex("^(?!auth).*$"))
  55. .build());
  56. return securityContexts;
  57. }
  58.  
  59. List<SecurityReference> defaultAuth() {
  60. AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
  61. AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
  62. authorizationScopes[0] = authorizationScope;
  63. List<SecurityReference> securityReferences=new ArrayList<>();
  64. securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
  65. return securityReferences;
  66. }
  67.  
  68. }

4.在Controller类上添加:

  1. @RestController
  2. //@RequestMapping("/api/v1/order")
  3. @RequestMapping(value = "api")
  4. @Api("OrderFeginController相关的api")
  5. public class OrderFeginController {
  6.  
  7. @Autowired
  8. private ProductOrderFeginService productOrderFeginService;
  9.  
  10. //限流:对外提供一个服务接口,允许最大并发数为10
  11. // private final Semaphore permit = new Semaphore(4, true);
  12.  
  13. //当调用微服务出现异常会降级到saveOrderFail方法中
  14. @HystrixCommand(fallbackMethod = "saveOrderFail")
  15. @RequestMapping(value = "/saveorder",method = RequestMethod.GET)
  16. @ApiOperation(value = "根据id查询商品信息", notes = "查询数据库中某个的商品信息")
  17. @ApiImplicitParams({
  18. @ApiImplicitParam(name = "user_id",paramType = "query", value = "用户ID", required = true),
  19. @ApiImplicitParam(name = "product_id",value = "商品ID",required = true,paramType = "query",dataType = "string")
  20. })
  21. public Object saveorder(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId) throws InterruptedException {
  22.  
  23. return productOrderFeginService.saveorder(userId, productId);
  24.  
  25. }
  26.  
  27. //注意,方法签名一定要要和api方法一致
  28. private Object saveOrderFail(int userId, int productId){
  29.  
  30. System.out.println("controller中的降级方法");
  31.  
  32. Map<String, Object> msg = new HashMap<>();
  33. msg.put("code", -1);
  34. msg.put("msg", "抢购人数太多,您被挤出来了,稍等重试");
  35. return msg;
  36. }
  37. }

  

SpringBoot+Swagger整合API的更多相关文章

  1. SpringBoot+Swagger整合

    0.引言及注意事项 Swagger是一个接口文档工具,依照Swagger可以0配置开发接口.不过要注意,Swagger是基于SpringBoot1.47版本开发的,而SpringBoot现在基本都是是 ...

  2. springboot swagger 整合

    Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步. 作用: 1.  ...

  3. SpringBoot+Swagger2 整合

    SpringBoot+Swagger2四步整合 第一步:添加相关依赖 <parent> <groupId>org.springframework.boot</groupI ...

  4. SpringBoot整合Swagger测试api构建

    @Author:SimpleWu 什么是Swagger? Swagger是什么:THE WORLD'S MOST POPULAR API TOOLING 根据官网的介绍: Swagger Inspec ...

  5. springboot+mybatis-puls利用swagger构建api文档

    项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...

  6. springboot+jpa+mysql+swagger整合

    Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency>      < ...

  7. SpringBoot与Swagger整合

    1 SpringBoot与Swagger整合https://blog.csdn.net/jamieblue1/article/details/99847744 2 Swagger详解(SpringBo ...

  8. springboot利用swagger构建api文档

    前言 Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一些常见问题.如果想深入分析项目源码,了解更多内容,见参考资料. S ...

  9. Docker镜像仓库Harbor之Swagger REST API整合配置

    转载自:https://cloud.tencent.com/developer/article/1010618 1.Swagger 介绍 Swagger 是一个规范和完整的框架,用于生成.描述.调用和 ...

随机推荐

  1. Centos7+LVS-DR+keepalived实验(包含sorry-server、日志、及HTTP-GET的健康检测)

    目录检索 一.简介 1.lvs-dr原理请参考原理篇 2.keepalived原理请参考原理篇 3.基于lvs-dr+keepalived故障切换架构图如下: 二.部署 1.环境 2.准备RS的web ...

  2. 高可用实现KeepAlived原理简介

    一.简介 目前主流实现web网站及数据库服务高可用软件包括:keepalived.heartbeat.corosync,cman;高可用简称HA: 官方站点:https://www.keepalive ...

  3. .Net Core 实践 - 如何在控制台应用(.Net Core)使用appsettings.json配置

    新建控制台应用(.Net Core)程序 添加json文件,命名为appsettings.json,设置文件属性 如果较新则复制.添加内容如下 { "MyWords" : &quo ...

  4. qutebrowser 只用键盘操作的浏览器

    一个 Qt 库制作的最简化浏览器,内核是 Chromium.最大特点就是它自带命令行,可以完全用键盘操作. 下载地址: 链接:https://share.weiyun.com/5Y2Ajvn 密码:m ...

  5. 并发concurrent---1

    背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 说到并发concurrent,肯定首先想到了线程,创建线程有两种方法 ...

  6. 解决IE6-IE7下li上下间距变大问题

    在IE6/7下li会向下产生大约2px的外边距 解决方法:li{vertical-align:top;}或者       li{vertical-align:bottom;} 解决问题!

  7. phpstorm 代码注释后,撤销某段代码的注释的,快捷键是什么?

    phpstorm 的代码注释有两种风格,一种是双斜杠,另一种是 /* ...  */风格,两者的快捷键都是开关式(即按第一次为注释,再按一次为撤销注释),快捷键如下: 1.双斜杠注释   Ctrl + ...

  8. CSS3文字与字体 text-overflow 与 word-wrap

    text-overflow 对象内的文本溢出部分采用省略“...”标记 或者 剪切: text-overflow:elip(超出容器边界的内容剪切掉)  | ellipsis(超出容器边界内容省略标示 ...

  9. python在sqlite动态创建表源码

    代码之余,将开发过程中经常用的代码片段备份一下,如下的代码是关于python在sqlite动态创建表的代码,应该能对各位有所用. import sqlite3 as db conn = db.conn ...

  10. JS 字符串对象 数组对象 函数对象 函数作用域

    一.内置对象 object对象:ECMAScript 中的所有对象都由这个对象继承而来:Object 对象中的所有属性和方法都会出现在其他对象中 ToString() : 返回对象的原始字符串表示.V ...