Swagger 3(1)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
“http://www.apache.org/licenses/LICENSE-2.0”,

new ArrayList());

}

}

在这里插入图片描述


配置Swagger自定义扫描接口


我们在这个ui界面中,可以看到扫描了两个controller接口;

在这里插入图片描述

  • 一个是默认的/error请求,也就是我们启动springboot主程序未加配置默认访问8080端口的默认controller

在这里插入图片描述

  • 剩余的就是我们自己再controller层写的请求映射了

自定义扫描接口


//配置Swagger的Docket的bean实例

@Bean

public Docket docket()

{

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())//配置Swagger信息

.select()

/**

  • apis():指定扫描的接口

  • RequestHandlerSelectors:配置要扫描接口的方式

  •   basePackage:指定要扫描的包
    
  •   any:扫面全部
    
  •   none:不扫描
    
  •   withClassAnnotation:扫描类上的注解(参数是类上注解的class对象)
    
  •   withMethodAnnotation:扫描方法上的注解(参数是方法上的注解的class对象)
    

*/

.apis(RequestHandlerSelectors.basePackage(“com.Controller”))

/**

  • paths():过滤路径

  • PathSelectors:配置过滤的路径

  •  any:过滤全部路径
    
  •  none:不过滤路径
    
  •  ant:过滤指定路径:按照按照Spring的AntPathMatcher提供的match方法进行匹配
    
  •  regex:过滤指定路径:按照String的matches方法进行匹配
    

*/

.paths(PathSelectors.any())

.build();

}

其中.select().apis.paths.build是一套组合进行使用

只有被过滤筛选出来并且在指定包下面的请求路径才会显示在页面上

在这里插入图片描述


配置是否启动Swagger


我么通过Docket对象的.enable方法来配置swagger是否启动

@Bean

public Docket docket()

{

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())//配置Swagger信息

.enable(false)//enable是否启动swagger,如果为false,那么浏览器中无法访问swagger

.select()

.apis(RequestHandlerSelectors.basePackage(“com.Controller”))

.paths(PathSelectors.any())

.build();

}

在这里插入图片描述


Swagger只在生产环境下使用


  • 首先要判断是不是开发环境,可以设置一个flag表示用来表示:flag=1即表示生产环境

  • 然后将flag的值传给enable(flag)

首先在resources目录下新建两种springboot配置文件

开发环境:application-dev.properties

server.port=8081

正式环境:application-pro.properties

server.port=8082

在这里插入图片描述

然后在主配置文件application.properties中激活开发环境

spring.profiles.active=dev

然后我们到SwaggerConfig中的docket()方法中添加代码:

首先给该方法传一个参数Environment的实例

Environment environment

首先设置要配置的Swagger环境:这里可以添加多个环境

Profiles.of(“dev”, “test”);

然后通过environment.acceptsProfiles方法判断是否处在上一步设定的dev/test环境中,返回一个boolean的值,我们用flag接收

boolean flag = environment.acceptsProfiles(profiles);

然后修改enable中的参数为flag,即通过flag来判断是否开启Swagger

.enable(flag)//通过flag判断是否开启

完整代码:

@Configuration

@EnableOpenApi //开启Swagger3

public class SwaggerConfig {

//配置Swagger的Docket的bean实例

@Bean

public Docket docket(Environment environment)

{

//设置要配置的Swagger环境

Profiles p = Profiles.of(“dev”, “test”);

//通过environment.acceptsProfiles判断是否处在自己设定的环境中

boolean flag = environment.acceptsProfiles§;

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())//配置Swagger信息

.enable(flag)

.select()

.apis(RequestHandlerSelectors.basePackage(“com.Controller”))

.paths(PathSelectors.any())

.build();

}

//配置Swagger信息

private ApiInfo apiInfo() {

return new ApiInfo(

“大忽悠项目”,

“大忽悠的Swagger API文档”,

“2.0”,//版本信息

“https://blog.csdn.net/m0_53157173”,//团队信息的url

new Contact(“大忽悠”, “https://blog.csdn.net/m0_53157173”, “3076679680@qq.com”),//作者信息

/Contact(String name, String url, String email)/

“Apache 2.0”,

“http://www.apache.org/licenses/LICENSE-2.0”,

new ArrayList());

}

}

然后启动主程序测试:由于激活了dev开发环境,所以访问localhost:8081/swagger-ui.html

在这里插入图片描述

成功开启swagger,如果我们修改主配置文件,激活pro正式发布环境

spring.profiles.active=pro

再次重启主程序测试,访问端口8082对应的地址localhost:8082/swagger-ui.html

在这里插入图片描述

无法进入,因为pro环境不在我们配置的test/dev环境中,所以无法开启


配置API文档分组


1. 设置默认组名

可以看到,我们默认只有一个组且组名为default

在这里插入图片描述

我们可以在docket通过.groupName中设置组名

@Bean

public Docket docket(Environment environment)

{

//设置要配置的Swagger环境

Profiles p = Profiles.of(“dev”, “test”);

//通过environment.acceptsProfiles判断是否处在自己设定的环境中

boolean flag = environment.acceptsProfiles§;

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())//配置Swagger信息

.enable(flag)

.groupName(“大忽悠”)

.select()

.apis(RequestHandlerSelectors.basePackage(“com.Controller”))

.paths(PathSelectors.any())

.build();

}

在这里插入图片描述


2. 配置多个组

**上述我们成功修改了组名,但是只有一个组,如果我们想要多个组呢?

观察代码可以知道,一个Docket实例就对应着一个组,因此我们配置多个docket就对应着多个组**

@Bean

public Docket docket1() {

return new Docket(DocumentationType.SWAGGER_2).groupName(“大忽悠1号”);

}

@Bean

public Docket docket2() {

return new Docket(DocumentationType.SWAGGER_2).groupName(“大忽悠2号”);

}

在这里插入图片描述


配置Model实体类


只要我们的controoler层方法中,返回值中存在实体类,他就会被扫描到Swagger中

@RestController

public class UserControoler

{

//只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中

@GetMapping(“/User”)

public User showUser(User u)

{

return u;

}

}

在这里插入图片描述

现在的问题是,页面显示出来的返回的User类,如果是非常复杂的情况下,没有注释就很难看懂,这样就有了注解来进行解释


@ApiModel为类添加注释


@ApiModelProperty为类属性添加注释


@NoArgsConstructor

@AllArgsConstructor

@Data

@ApiModel(“用户实体类”)

public class User

{

@ApiModelProperty(“姓名”)

String name;

@ApiModelProperty(“年龄”)

Integer age;

@TableId(value=“id”,type = IdType.AUTO)

@ApiModelProperty(“主键id”)

Integer id;

//字段添加填充内容

@TableField(fill = FieldFill.INSERT)

@ApiModelProperty(“创建时间”)

private Date createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)

@ApiModelProperty(“修改时间”)

private Date updateTime;

@Version

@ApiModelProperty(“版本,用于乐观锁”)

Integer version;

//逻辑删除字段

@TableLogic

@ApiModelProperty(“逻辑删除字段”)

private Integer deleted;

}

在这里插入图片描述


我们同样可以在Controller类和其中的方法上添加相应的注解


@Api

@ApiOperation

没加前:

在这里插入图片描述

加注解中…

@RestController

@Api(tags =“User数据交互”)

public class UserControoler

{

//只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中

@GetMapping(“/User”)

@ApiOperation(“展示用户”)

public User showUser(User u)

{

return u;

}

}

效果展示:

在这里插入图片描述


@ApiParam–给参数上加上解释

@RestController

@Api(tags =“User数据交互”)

public class UserControoler

{

//只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中

@GetMapping(“/User”)

@ApiOperation(“展示用户”)

public String showUser(@ApiParam(“特殊的名字”) String u)

{

return u;

}

}

在这里插入图片描述

我们可以简单测试一下,点击Try it out,然后点击Execute执行

在这里插入图片描述

在这里插入图片描述


常用注解总结


// @Api: 修饰整个类,描述Controller的作用

@Api(value = “注册登陆”, tags = “注册登陆相关接口”)

// @ApiOperation: 描述一个类的一个方法,或者说一个接口

@ApiOperation(value = “用户注册”, notes = “用户注册”, httpMethod = “POST”)

@ApiParam // 单个参数描述

// @ApiModel: 用对象来接收参数

@ApiModel(value = “用户对象BO”, description = “用户从客户端传入的数据的封装”)

// @ApiModelProperty: 用对象接收参数时,描述对象的一个字段

@ApiModelProperty(value = “用户名”, name = “username”, example = “Orcas”, required = true)

@ApiResponse // HTTP响应其中1个描述

@ApiResponses // HTTP响应整体描述

@ApiIgnore // 使用该注解忽略这个API

@ApiError // 发生错误返回的信息

@ApiImplicitParam // 一个请求参数

@ApiImplicitParams // 多个请求参数

=》 @ApiImplicitParams({

@ApiImplicitParam(name = “page”, value = “页码”, required = true, paramType = “path”, dataType = “int”),

@ApiImplicitParam(name = “size”, value = “每页记录数”, required = true, paramType = “path”, dataType = “int”)})

@ApiImplicitParam属性

在这里插入图片描述


总结: 发布的时候,记得关闭Swagger,可以通过生产环境设置来完成这一需求


最后

Java架构进阶面试及知识点文档笔记

这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理

image

Java分布式高级面试问题解析文档

其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

image

互联网Java程序员面试必备问题解析及文档学习笔记

image

Java架构进阶视频解析合集
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
piImplicitParam属性**

在这里插入图片描述


总结: 发布的时候,记得关闭Swagger,可以通过生产环境设置来完成这一需求


最后

Java架构进阶面试及知识点文档笔记

这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理

[外链图片转存中…(img-plCSIQFZ-1714769130465)]

Java分布式高级面试问题解析文档

其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!

[外链图片转存中…(img-6vohvfWV-1714769130465)]

互联网Java程序员面试必备问题解析及文档学习笔记

[外链图片转存中…(img-DWQMBzR1-1714769130466)]

Java架构进阶视频解析合集
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值