zoukankan      html  css  js  c++  java
  • SpringBoot整合Swagger自动生成API文档

    SpringBoot整合Swagger自动生成API文档

    java_zhangwei 2018-07-27 14:38:54 1395 已收藏 3
    展开
    目录

    1.引入Swagger依赖(我这里使用的2.2.2版本,尽量别使用新版本,不稳定)

    2.编写Swagger配置

    3.编写Controller

    4.一切准备就绪,现在打开网页试试

    5.相关的注解解释

    6.在此过程中出现的一些问题:

    Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件,相比于传统的postman插件,其优点在于:

    前后端可以分离开发
    API文档非常明确
    测试的时候不需要输入url链接
    SpringBoot与Swagger结合非常简单
     

    1.引入Swagger依赖(我这里使用的2.2.2版本,尽量别使用新版本,不稳定)

    <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.2.2</version>
    <scope>compile</scope>
    </dependency>
    <dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
    <scope>compile</scope>
    </dependency>

    2.编写Swagger配置

     1 package top.javazhangwei.webconfig;
     2 
     3 
     4 import org.springframework.context.annotation.Bean;
     5 import org.springframework.context.annotation.Configuration;
     6 import springfox.documentation.builders.ApiInfoBuilder;
     7 import springfox.documentation.builders.PathSelectors;
     8 import springfox.documentation.builders.RequestHandlerSelectors;
     9 import springfox.documentation.service.ApiInfo;
    10 import springfox.documentation.spi.DocumentationType;
    11 import springfox.documentation.spring.web.plugins.Docket;
    12 import springfox.documentation.swagger2.annotations.EnableSwagger2;
    13 
    14 /***
    15 * 指定API文档页的标题和描述信息等内容。
    16 */
    17 @Configuration
    18 @EnableSwagger2
    19 public class MySwagger {
    20 @Bean
    21 public Docket createRestApi() {
    22 return new Docket(DocumentationType.SWAGGER_2)
    23 .apiInfo(apiInfo())
    24 .select()
    25 .apis(RequestHandlerSelectors.basePackage("top.javazhangwei.controller"))//这里是controller所处的包名
    26 .paths(PathSelectors.any())
    27 .build();
    28 }
    29 //构建api文档的详细信息函数
    30 private ApiInfo apiInfo() {
    31 return new ApiInfoBuilder()
    32 //页面标题
    33 .title("spring-boot-web-crud项目")
    34 //描述
    35 .description("api查询测试接口")
    36 .termsOfServiceUrl("API terms of service")
    37 //版本号s
    38 .version("1.0")
    39 .build();
    40 }
    41 }
    View Code

    说明:

    在这里特别注意下:apis(RequestHandlerSelectors.basePackage("com.yto.controller")),这个是你Controller所在的包名
    配置完后,打开http://127.0.0.1:8080/swagger-ui.html#/看是否能访问不
     
    3.编写Controller

     1 package top.javazhangwei.controller;
     2 
     3 import top.javazhangwei.entities.Diary;
     4 import top.javazhangwei.mapper.DiaryMapper;
     5 import io.swagger.annotations.Api;
     6 import io.swagger.annotations.ApiOperation;
     7 import org.apache.catalina.servlet4preview.http.HttpServletRequest;
     8 import org.springframework.web.bind.annotation.RequestMapping;
     9 import org.springframework.web.bind.annotation.RestController;
    10 
    11 import javax.annotation.Resource;
    12 import java.util.List;
    13 
    14 @RestController
    15 @Api(description = "测试api")
    16 public class MyController {
    17 @Resource
    18 private DiaryMapper diaryMapper;
    19 //查询文章和用户信息
    20 @ApiOperation("测试关联查询文章和用户信息")
    21 @RequestMapping("/testDiary")
    22 public List<Diary> getAllDiaryAndUsers(HttpServletRequest request){
    23 List<Diary> list =diaryMapper.getAllDiary();
    24 return list;
    25 }
    26 }
    27 @Controller
    28 @Api(description = "登录api")
    29 public class LoginController {
    30 @Resource
    31 private UsersMapper usersMapper;
    32 @ApiOperation("用户登陆")
    33 @ApiImplicitParams({@ApiImplicitParam(name = "username",value = "用户名",required = true,dataType = "String",paramType="query"),
    34 @ApiImplicitParam(name = "password",value = "密码",required = true,dataType = "String",paramType="query")})
    35 @PostMapping(value = "/user/login")
    36 public String postLogin( @RequestParam("username") String username, @RequestParam("password") String password, HttpSession session, HttpServletRequest request) {
    37 Users users =usersMapper.login(username,password);
    38 if(users!=null){
    39 session.setAttribute("user",users);
    40 return "redirect:/main.html";
    41 }else{
    42 request.setAttribute("msg","用户名或密码错误");
    43 return "login";
    44 }
    45 }
    46 
    47 //返回登录界面
    48 
    49 @RequestMapping("/login")
    50 @ApiOperation("返回登录界面")
    51 public String login(){
    52 return "login";
    53 }
    54 
    55 }
    View Code


    4.一切准备就绪,现在打开网页试试
    如果访问不了页面或者页面的数据没改过来,尝试清除一下浏览器缓存~

     

     

    5.相关的注解解释


    其他注解查看官方文档源码: 
    https://github.com/swagger-api/swagger-core/wiki/Annotations#apimodel

    6.在此过程中出现的一些问题:
           1.出现这种提示:

     

        很有可能是没在Swagger配置上添加自动配置注解:@EnableSwagger2

        或者就是没有扫到controller,检查检查swagger配置上的包名是否正确

         2.出现failed to parse JSON/YAML response的问题

           这个原因就是拦截器把swagger请求拦截了,所以没有接口信息,只需要加个判断允许swagger允许访问即可。

    String url=httpServletRequest.getRequestURI();

    if(url.indexOf("swagger")!=-1||url.indexOf("api-docs")!=-1){
    return true;
    }
     
    ————————————————
    原文链接:https://blog.csdn.net/jav_zhangwei/article/details/81236230

  • 相关阅读:
    【BZOJ】1620: [Usaco2008 Nov]Time Management 时间管理(贪心)
    【BZOJ】1651: [Usaco2006 Feb]Stall Reservations 专用牛棚(线段树/前缀和 + 差分)
    【BZOJ】1628 && 1683: [Usaco2007 Demo]City skyline 城市地平线(单调栈)
    【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
    【BZOJ】1622: [Usaco2008 Open]Word Power 名字的能量(dp/-模拟)
    【BZOJ】1634: [Usaco2007 Jan]Protecting the Flowers 护花(贪心)
    【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)
    【BZOJ】1660: [Usaco2006 Nov]Bad Hair Day 乱发节(单调栈)
    【BZOJ】1642: [Usaco2007 Nov]Milking Time 挤奶时间(dp)
    【BZOJ】1629: [Usaco2007 Demo]Cow Acrobats(贪心+排序)
  • 原文地址:https://www.cnblogs.com/Ke-Me/p/13060496.html
Copyright © 2011-2022 走看看