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

原文地址:https://www.cnblogs.com/Ke-Me/p/13060496.html