SpringBoot使用Swagger2搭建强大的RESTful API 文档功能

简介: swagger用于定义API文档。Swagger2的使用Maven Plugin添加Swagger2相关jar包 1 2 3 io.springfox 4 springfox-swagger2 5 2.

swagger用于定义API文档。

Swagger2的使用

Maven Plugin添加Swagger2相关jar包

 1 <!--swagger2 start-->
 2 <dependency>
 3     <groupId>io.springfox</groupId>
 4     <artifactId>springfox-swagger2</artifactId>
 5     <version>2.2.2</version>
 6 </dependency>
 7 <dependency>
 8     <groupId>io.springfox</groupId>
 9     <artifactId>springfox-swagger-ui</artifactId>
10     <version>2.2.2</version>
11 </dependency>
12 <!--swagger2 end-->
View Code

添加Swagger2配置文件

 1 package com.goku.webapi.config.Swagger;
 2 
 3 import org.springframework.context.annotation.Bean;
 4 import org.springframework.context.annotation.Configuration;
 5 import springfox.documentation.builders.ApiInfoBuilder;
 6 import springfox.documentation.builders.PathSelectors;
 7 import springfox.documentation.builders.RequestHandlerSelectors;
 8 import springfox.documentation.service.ApiInfo;
 9 import springfox.documentation.spi.DocumentationType;
10 import springfox.documentation.spring.web.plugins.Docket;
11 import springfox.documentation.swagger2.annotations.EnableSwagger2;
12 
13 /**
14  * Created by nbfujx on 2017-11-14.
15  */
16 @Configuration
17 @EnableSwagger2
18 public class Swagger2Config {
19 
20     @Bean
21     public Docket createRestApi() {
22         return new Docket(DocumentationType.SWAGGER_2)
23                 .apiInfo(apiInfo())
24                 .select()
25                 .apis(RequestHandlerSelectors.basePackage("com.goku.webapi.controller"))
26                 .paths(PathSelectors.any())
27                 .build();
28     }
29 
30     private ApiInfo apiInfo() {
31         return new ApiInfoBuilder()
32                 .title("Goku.WebService.Simple")
33                 .description("Goku.WebService.Simple")
34                 .termsOfServiceUrl("https://github.com/nbfujx")
35                 .contact("nbfujx")
36                 .version("1.0")
37                 .build();
38     }
39 }
View Code

添加文档内容

在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过 @ApiOperation注解来给API增加说明、通过 @ApiImplicitParams@ApiImplicitParam注解来给参数增加说明。同时可以使用 @ApiIgnore来过滤一些不需要展示的接口。
  1 package com.goku.webapi.controller.impl;
  2 
  3 import com.alibaba.fastjson.JSON;
  4 import com.goku.webapi.controller.loginController;
  5 import com.goku.webapi.util.enums.returnCode;
  6 import com.goku.webapi.util.message.returnMsg;
  7 import io.swagger.annotations.Api;
  8 import io.swagger.annotations.ApiImplicitParam;
  9 import io.swagger.annotations.ApiImplicitParams;
 10 import io.swagger.annotations.ApiOperation;
 11 import org.apache.shiro.SecurityUtils;
 12 import org.apache.shiro.authc.AuthenticationException;
 13 import org.apache.shiro.authc.UsernamePasswordToken;
 14 import org.apache.shiro.crypto.hash.Md5Hash;
 15 import org.apache.shiro.session.SessionException;
 16 import org.apache.shiro.subject.Subject;
 17 import org.springframework.beans.factory.annotation.Autowired;
 18 import org.springframework.boot.autoconfigure.web.ErrorAttributes;
 19 import org.springframework.boot.autoconfigure.web.ErrorController;
 20 import org.springframework.http.HttpStatus;
 21 import org.springframework.web.bind.annotation.RequestMapping;
 22 import org.springframework.web.bind.annotation.RequestMethod;
 23 import org.springframework.web.bind.annotation.RequestParam;
 24 import org.springframework.web.bind.annotation.RestController;
 25 import org.springframework.web.context.request.RequestAttributes;
 26 import org.springframework.web.context.request.ServletRequestAttributes;
 27 import springfox.documentation.annotations.ApiIgnore;
 28 
 29 import javax.servlet.http.HttpServletRequest;
 30 import java.util.HashMap;
 31 import java.util.Map;
 32 
 33 
 34 /**
 35  * Created by nbfujx on 2017-11-07.
 36  */
 37 @RestController
 38 @Api(value="登录验证")
 39 public class loginControllerImpl implements loginController,ErrorController {
 40 
 41 
 42     private final static String ERROR_PATH = "/error";
 43 
 44     @Autowired
 45     private ErrorAttributes errorAttributes;
 46 
 47     @ApiOperation(value="用户登录", notes="用户登录校验")
 48     @ApiImplicitParams({
 49         @ApiImplicitParam(name = "username", value = "用户名", required = true, dataType = "String" ,paramType="query"),
 50         @ApiImplicitParam(name = "password", value = "密码", required = true, dataType = "String" ,paramType="query"),
 51         @ApiImplicitParam(name = "rememberMe", value = "记住用户", required = true, dataType = "String" ,paramType="query")
 52     })
 53     @RequestMapping(value = "/login", method = RequestMethod.POST)
 54     public String login(
 55             @RequestParam(value = "username", required = true) String userName,
 56             @RequestParam(value = "password", required = true) String password,
 57             @RequestParam(value = "rememberMe", required = true, defaultValue = "false") boolean rememberMe
 58     ) {
 59         String passwordmd5 = new Md5Hash(password, "2").toString();
 60         Subject subject = SecurityUtils.getSubject();
 61         UsernamePasswordToken token = new UsernamePasswordToken(userName, passwordmd5);
 62         token.setRememberMe(rememberMe);
 63         try {
 64             subject.login(token);
 65         } catch (AuthenticationException e) {
 66             e.printStackTrace();
 67             return JSON.toJSONString (new  returnMsg(returnCode.ERROR));
 68         }
 69         return  JSON.toJSONString (new  returnMsg(returnCode.SUCCESS));
 70     }
 71 
 72 
 73     @Override
 74     @RequestMapping(value = "/logout", method = RequestMethod.POST)
 75     @ApiOperation(value="用户退出", notes="用户退出校验")
 76     public String logout() {
 77         Subject subject = SecurityUtils.getSubject();
 78         try {
 79             subject.logout();
 80         }catch (SessionException e){
 81             e.printStackTrace();
 82             return JSON.toJSONString (new  returnMsg(returnCode.ERROR));
 83         }
 84         return JSON.toJSONString (new  returnMsg(returnCode.SUCCESS));
 85     }
 86 
 87     @Override
 88     @RequestMapping(value = "/notAuthc", method = RequestMethod.GET)
 89     @ApiIgnore
 90     public String notAuthc() {
 91         return JSON.toJSONString (new  returnMsg(returnCode.NOTAUTHC));
 92     }
 93 
 94     @Override
 95     @RequestMapping(value = "/notAuthz", method = RequestMethod.GET)
 96     @ApiIgnore
 97     public String notAuthz() {
 98         return  JSON.toJSONString (new  returnMsg(returnCode.NOTAUTHZ));
 99     }
100 
101     @Override
102     @RequestMapping(value =ERROR_PATH)
103     @ApiIgnore
104     public String error(HttpServletRequest request)
105     {
106         Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
107         return  JSON.toJSONString (new  returnMsg(returnCode.ERROR,body));
108     }
109 
110     @Override
111     public String getErrorPath() {
112         return ERROR_PATH;
113     }
114 
115     private boolean getTraceParameter(HttpServletRequest request) {
116         String parameter = request.getParameter("trace");
117         if (parameter == null) {
118             return false;
119         }
120         return !"false".equals(parameter.toLowerCase());
121     }
122 
123     private Map<String, Object> getErrorAttributes(HttpServletRequest request,boolean includeStackTrace) {
124         RequestAttributes requestAttributes = new ServletRequestAttributes(request);
125         Map<String, Object> map = this.errorAttributes.getErrorAttributes(requestAttributes,includeStackTrace);
126         String URL = request.getRequestURL().toString();
127         map.put("URL", URL);
128         return map;
129     }
130 
131 }
View Code

完成上述代码添加上,启动Spring Boot程序,访问:http://localhost:8080/swagger-ui.html

 

 
注解说明:
  • @Api:用在类上,说明该类的作用
  • @ApiOperation:用在方法上,说明方法的作用
  • @ApiImplicitParams:用在方法上包含一组参数说明
  • @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
    • paramType:参数放在哪个地方
      • header-->请求参数的获取:@RequestHeader
      • query-->请求参数的获取:@RequestParam
      • path(用于restful接口)-->请求参数的获取:@PathVariable
      • body(不常用)
      • form(不常用)
    • name:参数名
    • dataType:参数类型
    • required:参数是否必须传
    • value:参数的意思
    • defaultValue:参数的默认值
  • @ApiResponses:用于表示一组响应
  • @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
    • code:数字,例如400
    • message:信息,例如"请求参数没填好"
    • response:抛出异常的类
  • @ApiModel:描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)
    • @ApiModelProperty:描述一个model的属性
以上这些就是最常用的几个注解了。


 

GITHUB

github : https://github.com/nbfujx/learn-java-demo/tree/master/Goku.WebService.Simple.Swagger2

目录
相关文章
|
28天前
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
67 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
28天前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
64 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
28天前
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
38 0
|
28天前
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
96 0
|
1月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
1月前
|
XML JSON API
Understanding RESTful API and Web Services: Key Differences and Use Cases
在现代软件开发中,RESTful API和Web服务均用于实现系统间通信,但各有特点。RESTful API遵循REST原则,主要使用HTTP/HTTPS协议,数据格式多为JSON或XML,适用于无状态通信;而Web服务包括SOAP和REST,常用于基于网络的API,采用标准化方法如WSDL或OpenAPI。理解两者区别有助于选择适合应用需求的解决方案,构建高效、可扩展的应用程序。
|
1月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建 RESTful API
本文深入探讨了使用 Python 构建 RESTful API 的方法,涵盖 Flask、Django REST Framework 和 FastAPI 三个主流框架。通过实战项目示例,详细讲解了如何处理 GET、POST 请求,并返回相应数据。学习这些技术将帮助你掌握构建高效、可靠的 Web API。
|
2月前
|
存储 机器学习/深度学习 人工智能
如何使用非结构化 API 高效处理文档
手动处理非结构化文档面临格式不一致、数据噪声多和信息检索困难等挑战,导致低效率和合规风险。Unstructured API 通过自动化文档处理,利用AI技术简化分类、归类和异常检测,节省时间和提高准确性。Supametas.AI 作为领先平台,支持多种文件类型(如文本、图片、视频),适用于各行各业,可与Salesforce、Zendesk等工具无缝集成,确保数据流动顺畅并提升工作效率。其强大的功能包括数据摄取、处理技术、检索增强生成、灵活性、可扩展性和集成能力,帮助企业和小公司高效处理大量非结构化数据,实现业务增长和优化工作流程。
122 4
|
3月前
|
开发框架 数据可视化 .NET
.NET 中管理 Web API 文档的两种方式
.NET 中管理 Web API 文档的两种方式
70 14
|
3月前
|
API 开发者
通义灵码 API 开发文档自动生成场景DEMO
通义灵码API开发文档自动生成场景DEMO展示了通过自定义指令,大模型能快速根据类代码生成Markdown格式的API文档。文档详细描述API的入参、出参,并可生成测试代码等示例,帮助开发者快速创建美观的API文档。
202 1

热门文章

最新文章