最全Swagger 3(1),面试4个月被17家公司拒绝

最后

分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。

《Java高级面试》

《Java高级架构知识》

《算法知识》

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

自定义扫描接口


//配置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: 用对象来接收参数

最后

这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档

祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!

感谢大家的支持!!

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

XzUzMTU3MTcz,size_16,color_FFFFFF,t_70)


常用注解总结


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

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

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

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

@ApiParam // 单个参数描述

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

最后

这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档

祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!

感谢大家的支持!!

[外链图片转存中…(img-t0jLrkJU-1715584720711)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值