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

目录
相关文章
|
2月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
366 2
|
9月前
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
649 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
9月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1022 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
8月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
755 0
|
9月前
|
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`两个模块。
351 0
|
9月前
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
302 0
|
5月前
|
缓存 前端开发 Java
SpringBoot 实现动态菜单功能完整指南
本文介绍了一个动态菜单系统的实现方案,涵盖数据库设计、SpringBoot后端实现、Vue前端展示及权限控制等内容,适用于中后台系统的权限管理。
439 1
|
7月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
|
6月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
963 0

热门文章

最新文章