最后
分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。
《Java高级面试》
《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是一套组合进行使用
只有被过滤筛选出来并且在指定包下面的请求路径才会显示在页面上
我么通过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();
}
-
首先要判断是不是开发环境,可以设置一个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环境中,所以无法开启
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号”);
}
只要我们的controoler层方法中,返回值中存在实体类,他就会被扫描到Swagger中
@RestController
public class UserControoler
{
//只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger中
@GetMapping(“/User”)
public User showUser(User u)
{
return u;
}
}
现在的问题是,页面显示出来的返回的User类,如果是非常复杂的情况下,没有注释就很难看懂,这样就有了注解来进行解释
@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视频、面试题和技术文档
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
XzUzMTU3MTcz,size_16,color_FFFFFF,t_70)
// @Api: 修饰整个类,描述Controller的作用
@Api(value = “注册登陆”, tags = “注册登陆相关接口”)
// @ApiOperation: 描述一个类的一个方法,或者说一个接口
@ApiOperation(value = “用户注册”, notes = “用户注册”, httpMethod = “POST”)
@ApiParam // 单个参数描述
// @ApiModel: 用对象来接收参数
最后
这份清华大牛整理的进大厂必备的redis视频、面试题和技术文档
祝大家早日进入大厂,拿到满意的薪资和职级~~~加油!!
感谢大家的支持!!
[外链图片转存中…(img-t0jLrkJU-1715584720711)]