springboot调用swagger接口(在SpringBoot中如何配置Swagger)

今天因社区群里,有人提出想了解《Spring Boot中配置Swagger》在此写一篇配置博客,希望能帮助还没开始使用Swagger的朋友,接下来我们就来聊聊关于springboot调用swagger接口?以下内容大家不妨参考一二希望能帮到您!

springboot调用swagger接口(在SpringBoot中如何配置Swagger)

springboot调用swagger接口

今天因社区群里,有人提出想了解《Spring Boot中配置Swagger》。在此写一篇配置博客,希望能帮助还没开始使用Swagger的朋友。

一、Swagger是什么?

Swagger是一个接口文档工具,这是我对Swagger的第一印象。做为JAVA的一员,写接口是经常的事,但你的接口要让其他人调用怎么办?只能手写一个接口说明文档,这样很费时间。而Swagger就帮你解决了这个问题。它监听着你指定的包下的注解,对Swagger相关注解进行动态生成对应的接口页面,你只要遵行它的注解配置,它将给你一份很直观的UI接口网页,你可以像Postman一样进行接口测试。即解决了你的手写文档,又能帮助你接口单元测试。同理,你只要把页面地址给调用你接口的人,他就可以在上面进行模拟调用,参数与返回值直接显示页面中。方便快捷。这是他的作用之一,其他作用,有兴趣的可以百度

二、开始配置

我是以Spring Boot框架上配置Swagger,其他框架有稍微不同,本文就不一一解说了

1、导依赖包

<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.6.1</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.6.1</version> </dependency>

2、增加启动配置(在Spring Boot的启动类中加上@EnableSwagger2)

@SpringBootApplication @EnableSwagger2 @EnableFeignClients @MapperScan("com.xx.dao") public class BaseServiceApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return super.configure(builder); } public static void main(String [] args){ SpringApplication springApplication = new SpringApplication(BaseServiceApplication.class); springApplication.run(); }

3、增加一个加载类,这个类放哪个包下都行,我是放common。这个类重要的是注解@Configuration,注入到里面,随程序初始化。到此初始配置就完成了

package com.qhs.common; 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.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; /** * Swagger2 的配置文件 * Created by qhs */ @Configuration public class SwaggerConfigure { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(ApiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.qhs.controller")) //指向你的controller包 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("基础服务系统")//这个会在Swagger页面中显示, .description("服务") .termsOfServiceUrl("http://www.baseservice.com") .version("1.0") .build(); } }

4、使用Swagger写接口,我拿一个Controller接口做演示

package com.qhs.controller; import com.alibaba.fastjson.JSON; import com.qhs.common.ServiceCommon; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import java.util.HashMap; import java.util.Map; /** * @Description: PDF转图片接口类 * @Author: 邱恒森 * @CreateDate: 2019/7/8 11:40 * @UpdateUser: 邱恒森 * @UpdateDate: 2019/7/8 11:40 * <p> * copyright: Copyright (c) 2019 **/ @Controller @RequestMapping("/pdf") @Api(value = "PDF接口类",description = "PDF接口类") public class PdfController { @PostMapping("/to/jpg") @ApiOperation(value = "测试") @ResponseBody public Object pdfToJpg( @ApiParam(name = "pdfFilePath", value = "PDF路径") @RequestParam() String pdfFilePath, @ApiParam(name = "dstImgFolder", value = "图片地址") @RequestParam() String dstImgFolder, @ApiParam(name = "dpi", value = "模板Id") @RequestParam() int dpi ) { return ServiceCommon.pdf2Image(pdfFilePath,dstImgFolder,dpi); } }

重要的注解有几项:

4.1、接口大类说明,对应页面中的页面中的大方法说明,相当于注释,这个是很有必要的,否则接口众多,从何找起

@Api(value = "PDF接口类",description = "PDF接口类")

4.2、方法区的头上,这是方法注释,在页面中,当点击类说明时,会向下展开类下面方法,方便他人查找接口

@ApiOperation(value = "测试")

4.3、也是最重要的,就是参数说明及是否必填,这有两种说明方式,一种是分开参数定义,另外一种是对象参数定义,

4.3.1:分开参数定义:

@ApiParam(name = "pdfFilePath", value = "PDF路径") @RequestParam(required = true) String pdfFilePath,

name:是参数的命名,跟后面的String pdfFilePath需要同名。

value:是参数说明,方便调用者看到这个

@RequestParam(required = true):代表着这个参数必填(默认为true),这也是Swagger的一个功能,可以强制方法参数是否必须传,不传进不了方法。

String pdfxxxxx:参数命名,跟前面的name要一样

以上就是方法定义了一个参数。

4.3.2:有的人可能习惯了传对象,如果是传对象,就不使用@ApiParam宣言参数,使用@RequestBody 对象类 类别名 来定义参数。

@RequestBody AddDelivery addDelivery

如果只是上面那样定义还不行,还得在对象类中加注解

@ApiModel(value = "送达文书增加(类值不能在别的类中相同)",description = "参数对象说明") public class AddDelivery { @ApiModelProperty(value = "对象下的参数说明",required = true)//必填 private String[] litigantIds; @ApiModelProperty(value = "发送方式",required = false)//非必填 private Integer sendWay;

两个注解

@ApiModel:API模型注解,定义了一个模型,value要唯一,不能跟其他的model类同名。

@ApiModelProperty:参数定义,value是参数的说明,会在页面中显示,required跟前面说的一样,是否必填。

最后显示的就是这样:

到此Swagger的配置及基本用法就讲完了,基本不难,建议大家可以用Swagger代替接口说明文档,尤其是前后端分离的项目开发模式下,接口文档是非常重要的。Swagger还能模拟调用接口。这也是他流行之处。

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页