前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >SpringBoot整合Swagger

SpringBoot整合Swagger

作者头像
爱撒谎的男孩
发布2019-12-31 15:40:34
发布2019-12-31 15:40:34
98600
代码可运行
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏
运行总次数:0
代码可运行

文章目录

1. SpringBoot整合Swagger

1.1. 依赖

1.2. 配置类

1.3. 启动类

1.4. 访问api的路径

1.5. 注解说明

1.5.1. @Api

1.5.2. @ApiOperation

1.5.3. @ApiImplicitParams

1.5.4. @ApiImplicitParam

1.5.4.1. paramType属性的详细说明

1.6. 导出到markdown文件

1.6.1. 添加依赖

1.6.2. 添加一个测试类

1.7. 参考文章

SpringBoot整合Swagger

依赖

代码语言:javascript
代码运行次数:0
复制
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.7.0</version>
</dependency>
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger-ui</artifactId>
	<version>2.7.0</version>
</dependency>

配置类

代码语言:javascript
代码运行次数:0
复制
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger的配置类
 * @author 陈加兵
 *
 */
@Configuration
public class SwaggerConfig {
	/**
	 * 创建用户API文档
	 * @return
	 */
	@Bean
	public Docket createRestUserApi() {
		return new Docket(DocumentationType.SWAGGER_2)
				.groupName("user")  
				.apiInfo(apiInfo())   //api的信息
				.select()
				.apis(RequestHandlerSelectors
						.basePackage("cn.tedu.mycat.controller"))   //添加包扫描
				.paths(PathSelectors.any()).build();

	}

	/**
	 * 创建API信息
	 */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("api文档的标题")   //标题
				.description("api文档的描述")  //描述  
				.contact(    //添加开发者的一些信息
						new Contact("爱撒谎的男孩", "https://chenjiabing666.github.io",
								"18796327106@163.com")).version("1.0").build();
	}

}

启动类

  • 在springBoot的启动类上添加一个注解即可配置成功:@EnableSwagger2

访问api的路径

  • http://ip/projectName/swagger-ui.html :html的页面
  • http://localhost:8080/demo/v2/api-docs:这个是json数据的页面

注解说明

@Api

  • 标注在类上,用来对这个类进行说明的
  • 如果想要生成文档,必须在类或者接口上标注
  • 属性如下:

属性名称

备注

默认值

value

url的路径值

tags

如果设置这个值、value的值会被覆盖

description

对api资源的描述

basePath

基本路径可以不配置

position

如果配置多个Api 想改变显示的顺序位置

produces

For example, “application/json, application/xml”

consumes

For example, “application/json, application/xml”

protocols

Possible values: http, https, ws, wss.

authorizations

高级特性认证时配置

hidden

配置为true 将在文档中隐藏

@ApiOperation

  • 用在API方法上,对该API做注释,说明API的作用
  • 不需要多讲,看源码,使用默认的value属性即可,说明该方法的作用
  • 属性如下:

value

url的路径值

tags

如果设置这个值、value的值会被覆盖

notes

对api资源的描述

response

返回的对象,在文档中点击Model可以获取该配置的内容

responseContainer

这些对象是有效的 “List”, “Set” or “Map”.,其他无效

responseReference

可以不配置

httpMethod

可以接受 “GET”, “HEAD”, “POST”, “PUT”, “DELETE”, “OPTIONS” and “PATCH”

position

如果配置多个Api 想改变显示的顺序位置

produces

同 Api中的定义

consumes

同 Api中的定义

protocols

同 Api中的定义

authorizations

同 Api中的定义

hidden

是否隐藏,true 或者false ,这个可以隐藏后台接口

code

http的状态码 默认 200

extensions

扩展属性

@ApiImplicitParams

  • 用来包含API的一组参数注解,可以简单的理解为参数注解的集合声明
  • 很重要,这个注解其中包含接口入参的详细说明
  • 内容是集合

@ApiImplicitParam

  • 用在@ApiImplicitParams注解中,也可以单独使用,说明一个请求参数的各个方面
  • 详细的属性使用说明如下:
    • name:属性的字段名称,相当于form表单中的name,这个就是入参的字段
    • dataType:参数的类型,标识,字符串
    • value:该参数的描述
    • required:是否必填,布尔值
    • defaultValue:缺省值,会在文档中缺省填入,这样更方面造数据,不需要调用接口的去填值了
    • paramType:指定参数的入参数方式(也就是请求参数的位置),其中有四种常用的,如下:
      • query
      • path
      • body
      • form
paramType属性的详细说明
  • query:必须要和入参的字段一样,也可以使用@RequestParam()指定
  • path:用于Restful的风格的url,请求的参数写在路径上,如下:
代码语言:javascript
代码运行次数:0
复制
@ApiOperation(value="根据用户Id获取用户信息",response=User.class,hidden=false)
	@ApiImplicitParams({
			@ApiImplicitParam(paramType = "path", name = "id", dataType="Integer", required = false, value = "用户的id", defaultValue = "1")
	})
	@GetMapping("/user/get/{id}")
	public Object getUser(@PathVariable("id")Integer id) {
		return new User(id, "陈加兵");
	}
  • body:以流的形式提交 仅支持POST
  • form:以表单的形式提交

导出到markdown文件

添加依赖

代码语言:javascript
代码运行次数:0
复制
<!-- swagger自动生成文档依赖 -->
	<dependency>
		<groupId>io.springfox</groupId>
		<artifactId>springfox-swagger2</artifactId>
		<version>${swagger-version}</version>
		<exclusions>
			<exclusion>
				<groupId>io.swagger</groupId>
				<artifactId>swagger-models</artifactId>
			</exclusion>
		</exclusions>
	</dependency>

	<dependency>
		<groupId>io.springfox</groupId>
		<artifactId>springfox-swagger-ui</artifactId>
		<version>${swagger-version}</version>
	</dependency>

	<!--导出到markdown文件的依赖 -->
	<dependency>
		<groupId>io.github.swagger2markup</groupId>
		<artifactId>swagger2markup</artifactId>
		<version>1.3.3</version>
	</dependency>
	
	<dependency>
		<groupId>ch.netzwerg</groupId>
		<artifactId>paleo-core</artifactId>
		<version>0.11.0</version>
		<scope>system</scope>
		<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/paleo-core-0.11.0.jar</systemPath>
	</dependency>

	<dependency>
		<groupId>nl.jworks.markdown_to_asciidoc</groupId>
		<artifactId>markdown_to_asciidoc</artifactId>
		<version>1.0</version>
		<scope>system</scope>
		<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/markdown_to_asciidoc-1.0.jar</systemPath>
	</dependency>
  • 由于需要paleo-coremarkdown_to_asciidoc,但是这两个依赖使用maven不能自动导入,只能使用本地jar的方式了

添加一个测试类

代码语言:javascript
代码运行次数:0
复制
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import io.github.swagger2markup.GroupBy;
import io.github.swagger2markup.Language;
import io.github.swagger2markup.Swagger2MarkupConfig;
import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder;
import io.github.swagger2markup.markup.builder.MarkupLanguage;

/**
* 生成Markdown文件的类
*/
public class SwaggerTest {
	public static void main(String[] args) throws Exception {
	    Path outputFile = Paths.get("build/swagger");   //指定生成的目录和文件的名称swagger.md
	    Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
	            .withMarkupLanguage(MarkupLanguage.MARKDOWN)
	            .withOutputLanguage(Language.ZH)
	            .withPathsGroupedBy(GroupBy.TAGS)
	            .withGeneratedExamples()
	            .withoutInlineSchema()
	            .build();
	    Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(new URL("http://localhost:8080/demo/v2/api-docs"))   //url是可以访问的在线json数据的url
	            .withConfig(config)
	            .build();
	    converter.toFile(outputFile);
	}
}
  • 一定要保证这里的链接可以访问,因此可以把项目启动起来之后再执行这个测试类,将会在项目的build目录下生成对应的文档
  • 如果需要生成其他的文档,可以使用Typora导出到pdf或者doc文件

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot整合Swagger
    • 依赖
    • 配置类
    • 启动类
    • 访问api的路径
    • 注解说明
      • @Api
      • @ApiOperation
      • @ApiImplicitParams
      • @ApiImplicitParam
    • 导出到markdown文件
      • 添加依赖
      • 添加一个测试类
    • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档