SpringBoot-Swagger

SpringBoot-Swagger,第1张

概述Swagger 1. 简介 号称世界上最流行的API框架 RestFul API 文档在线自动生成工具 ⇒ API文档与API定义同步更新 直接运行, 可以在线测试API接口 支持多种语言 在项目中使 Swagger

目录Swagger1. 简介2. SpringBoot集成Swagger1. 导入依赖2. 配置Swagger3. Swagger配置1. 配置Swagger信息2. Swagger配置扫描接口3. 配置Swagger是否启动4. 配置API文档的分组4. 实体类配置1. 实体类的注解2. 接口类的注解5. 总结

1. 简介号称世界上最流行的API框架RestFul API 文档在线自动生成工具 => api文档与API定义同步更新直接运行,可以在线测试API接口支持多种语言在项目中使用Swagger需要SpringFoxSwagger2ui2. SpringBoot集成Swagger1. 导入依赖

Swagger3.0直接导入Springfox Boot Starter就可以了

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter --><dependency>    <groupID>io.springfox</groupID>    <artifactID>springfox-boot-starter</artifactID>    <version>3.0.0</version></dependency>

2.X版本需要导入Swagger2.0和UI

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --><dependency>    <groupID>io.springfox</groupID>    <artifactID>springfox-swagger-ui</artifactID>    <version>2.9.2</version></dependency><!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency>    <groupID>io.springfox</groupID>    <artifactID>springfox-swagger2</artifactID>    <version>2.9.2</version></dependency>

我们这里还是使用2.X版本

2. 配置Swagger
package com.wang.config;import org.springframework.context.annotation.Configuration;import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration//开启Swagger2@EnableSwagger2public class SwaggerConfig {    }

注意

只要在Swagger配置类上加上@EnableSwagger2注解,就可以使用Swagger2了Swagger的地址为http://localhost:8080/swagger-ui.HTML3. Swagger配置1. 配置Swagger信息

Swagger的Bean实例 ==> Docket

package com.wang.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.service.APIInfo;import springfox.documentation.service.Contact;import springfox.documentation.service.vendorExtension;import springfox.documentation.spi.documentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.util.ArrayList;@Configuration//开启Swagger2@EnableSwagger2public class SwaggerConfig {    //配置了Swagger的Docket的Bean实例    @Bean    public Docket docket() {        return new Docket(documentationType.SWAGGER_2)                .APIInfo(APIInfo());    }    //配置Swagger信息 APIInfo    private APIInfo APIInfo() {        //作者信息        Contact contact = new Contact("wang","https://www.cnblogs.com/wang-sky/","715180879@qq.com");        return new APIInfo(                "我的Swagger接口文档","这是一个Swagger接口文档","V 1.0",contact,"Apache 2.0","http://www.apache.org/licenses/liCENSE-2.0",new ArrayList<vendorExtension>());    }}

这里修改的是Swagger页面的一些信息,结果如下

注意

Docket不要忘了注册Bean并返回一个new Docket返回的Docket要传入一个参数指定产生的文档的类型,我们这里使用 documentationType.SWAGGER_22. Swagger配置扫描接口

Docket.select()

@Beanpublic Docket docket() {    //RequestHandlerSelectors 配置要扫描接口的方式    /*    basePackage     指定要扫描的包    any             扫描全部    none            都不扫描    withClassAnnotation 扫描类上的注解,参数是一个注解的反射对象,比如 withClassAnnotation(RestController.class)    withMethodAnnotation    扫描方法上的注解     */    //paths 过滤的路径,需要传入PathSelectors.xxx 选择过滤的方式    return new Docket(documentationType.SWAGGER_2)            .APIInfo(APIInfo())            .select()            .APIs(RequestHandlerSelectors.basePackage("com.wang.controller"))            .paths(PathSelectors.ant("/wang/**"))            .build();}

注意

APIs 扫描,要传入RequestHandlerSelectors.xxx 指定扫描的方式basePackage 指定要扫描的包any 扫描全部none 都不扫描withClassAnnotation 扫描类上的注解,比如 withClassAnnotation(RestController.class)withMethodAnnotation 扫描方法上的注解paths 过滤的路径,需要传入PathSelectors.xxx 选择过滤的方式最后要.build(),建造者模式,同时由于这是链式编程,一定要写!select().XXX.XXX...bulID()是一套,中间可以写的方法是确定的,不能乱写3. 配置Swagger是否启动

只在生产环境下使用Swagger,而在发布的时候不使用的方法

分别建立不同环境的yml

在application中选择启动的环境,这里选择生产环境

spring:  profiles:    active: dev

配置Swagger

//配置了Swagger的Docket的Bean实例@Beanpublic Docket docket(Environment environment) {    //RequestHandlerSelectors 配置要扫描接口的方式    /*    basePackage     指定要扫描的包    any             扫描全部    none            都不扫描    withClassAnnotation 扫描类上的注解,需要传入PathSelectors.xxx 选择过滤的方式    //设置要显示的Swagger环境    Profiles profiles = Profiles.of("dev");    //通过environment.acceptsProfiles,判断是否处在自己设定的环境当中    boolean flag = environment.acceptsProfiles(profiles);    return new Docket(documentationType.SWAGGER_2)            .APIInfo(APIInfo())            .select()            .APIs(RequestHandlerSelectors.basePackage("com.wang.controller"))            .paths(PathSelectors.ant("/wang/**"))            .build()            .enable(flag);}

注意

.enable只能在select().XXX.XXX....bulID() 外面写默认为true,如果为False,则Swagger不能在浏览器中访问要用 Profiles profiles = Profiles.of("dev"); 指定激活的环境的名字获得当前的生产环境(application指定的环境),要给Docket传入一个Environment对象,其中保存了当前环境的名字environment.acceptsProfiles(profiles); 利用此方法获得是否在给定环境的布尔值4. 配置api文档的分组
.groupname("我的API")

配置多个分组,只需要配置多个Docket即可

4. 实体类配置1. 实体类的注解
package com.wang.pojo;import io.swagger.annotations.API;import io.swagger.annotations.APIModel;import io.swagger.annotations.APIModelProperty;import lombok.Data;@Data//@API("注释")@APIModel("用户实体类")public class User {    @APIModelProperty("用户名")    private String username;    @APIModelProperty("密码")    private String password;}

@APIModel或者@API在类上

@APIModelProperty在属性上

属性为私有,要写getter才能取到属性名

结果显示在Model上

2. 接口类的注解
package com.wang.controller;import com.wang.pojo.User;import io.swagger.annotations.APIOperation;import io.swagger.annotations.APIParam;import org.springframework.web.bind.annotation.GetMapPing;import org.springframework.web.bind.annotation.PostMapPing;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController {    @GetMapPing(value = "/hello")    public String hello() {        return "Hello!";    }    //只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中    @PostMapPing("/user")    public User user() {        return new User();    }    //Operation接口    //Get请求中,如果添加了字段的注释@APIParam,Swagger无法测试    @APIOperation("Hello2接口")    @GetMapPing("/hello2")    public String hello2(String username) {        return "hello " + username;    }    //Operation接口    @APIOperation("Hello3接口")    @PostMapPing("/hello3")    public User hello3(@APIParam("用户") User user) {        return user;    }}

注意

只要我们的接口中,返回值中存在实体类或者字符串,他就会被扫描到Swagger中@APIOperation 方法的注释@APIParm 参数的注释Get请求中,Swagger无法测试5. 总结我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息接口文档实时更新可以在线测试注意,在正式发布的时候,关闭Swagger(出于安全考虑,而且节省运行内存) 总结

以上是内存溢出为你收集整理的SpringBoot-Swagger全部内容,希望文章能够帮你解决SpringBoot-Swagger所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存