springboot中swagger快速启动流程
介绍
可能⼤家都有⽤过swagger,可以通过ui页⾯显⽰接⼝信息,快速和前端进⾏联调。
没有接触的⼩伙伴可以参考⽂章进⾏了解下。
多应⽤
当然在单个应⽤⼤家可以配置SwaggerConfig类加载下buildDocket,就可以快速构建好swagger了。
代码⼤致如下:
/**
* Swagger2配置类
* 在与spring boot集成时,放在与Application.java同级的⽬录下。
* 通过@Configuration注解,让Spring来加载该类配置。
* 再通过@EnableSwagger2注解来启⽤Swagger2。
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* 创建API应⽤
* apiInfo() 增加API相关信息
* 通过select()函数返回⼀个ApiSelectorBuilder实例,⽤来控制哪些接⼝暴露给Swagger来展现,
* 本例采⽤指定扫描的包路径来定义指定要建⽴API的⽬录。
*
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("ller"))
.paths(PathSelectors.any())
.build();
}
/
**
* 创建该API的基本信息(这些基本信息会展现在⽂档页⾯中)
* 访问地址:项⽬实际地址/swagger-ui.html
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使⽤Swagger2构建RESTful APIs")
.description("更多请关注www.baidu")
.termsOfServiceUrl("www.baidu")
.contact("sunf")
.
version("1.0")
.build();
}
}
3|0模块化-Starter
缘由
有开发过微服务的⼩伙伴应该体会过。当微服务模块多的情况下,每个模块都需要配置这样的⼀个类进⾏加载swagger。造成每个模块都存在⼤致⼀样的SwaggerConfig,极端的情况下,有些朋友复制其他模块的SwaggerConfig进⾏改造之后,发现仍然加载不出swagger的情况,造成明明是复制的,为何还加载不出,排查此bug及其费时间。
在此之上,可以构建出⼀个swagger-starter模块,只需要引⽤⼀个jar,加载⼀些特殊的配置,就可以快速的使⽤到swagger的部分功能了。
设计
1. 创建模块swagger-spring-boot-starter。
2. 功能⼤致如下:
3. 加载SwaggerConfig。
通过配置化配置swagger。
Enable加载注解。
1. 创建SwaggerConfig
SwaggerConfig和之前的⼀致,只是⾥⾯的配置需要外部化。
@Configuration
@PropertySource(value = "classpath:swagger.properties", ignoreResourceNotFound = true, encoding = "UTF-8")
@EnableConfigurationProperties(SwaggerProperties.class)
public class SwaggerConfig {
@Resource
private SwaggerProperties swaggerProperties;
@Bean
public Docket buildDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInf())
.select()
.apis(RequestHandlerSelectors.basePackage(""))
.paths(PathSelectors.any())
.build();
}
private ApiInfo buildApiInf() {
return new ApiInfoBuilder()
.Title())
.Description())
.TermsOfServiceUrl())
.contact(new Contact("skyworth", TermsOfServiceUrl(), ""))
.Version())
.build();
}
}
2. 创建SwaggerProperties 配置相关
配置通过@PropertySource注解加载resources⽬录下的swagger.properties。
创建SwaggerProperties配置类,这个类⾥包含了⼀般swagger初始化要使⽤的⼀些常⽤的属性,如扫描包路径、title等等。
@Data
@ToString
@ConfigurationProperties(SwaggerProperties.PREFIX)
public class SwaggerProperties {
public static final String PREFIX = "swagger";
/**
* ⽂档扫描包路径
*/
private String basePackage = "";
/**
* title 如: ⽤户模块系统接⼝详情
*/
private String title = "深兰云平台系统接⼝详情";
/**
* 服务⽂件介绍
*/
private String description = "在线⽂档";
/**
* 服务条款⽹址
*/
private String termsOfServiceUrl = "www.deepblueai/";
/**
* 版本
*/
private String version = "V1.0";
}
做好这两件事情基本⼤⼯搞成了,为了更好的使⽤配置,在idea⾥和官⽅starter包⼀样,我们还需要配置⼀个additional-spring-configuration-metadata.json,让我们⾃⼰的配置也具有提⽰的功能,具体介绍请产考:配置提⽰配置提⽰配置提⽰配置提⽰配置
提⽰ ...
3. 加载SwaggerConfig等特性
因为是starter模块,可能他⼈的项⽬⽬录和starter模块的⽬录不⼀致,导致加载不到SwaggerConfig类,我们需要使⽤spring.factories把SwaggerConfig类装载到spring容器。
resources/META-INF
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.purge.swagger.SwaggerConfig
当然本次基于Enable⽅式去加载SwaggerConfig。
创建@EnableSwaggerPlugins注解类,使⽤@Import(SwaggerConfig.class)将SwaggerConfig导⼊⼤⼯搞成。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(SwaggerConfig.class)
@EnableSwagger2
public @interface EnableSwaggerPlugins {
}
4|0使⽤
添加依赖
把⾃⼰编写好的swagger通过maven打包,⾃⼰项⽬引⽤。
<dependency>
<groupId>com.purge.swagger</groupId>
<artifactId>swagger-spring-boot-starter<factId>
<version>0.1.0.RELEASE</version>
</dependency>
配置swagger.properties⽂件
在⾃⼰项⽬模块的resources⽬录下创建swagger.properties配置
swagger.properties ⼤致配置如下
swagger.basePackage="swagger扫描项⽬包路径"
swagger.title="swagger⽹页显⽰标题"
swagger.description="swagger⽹页显⽰介绍"
启动类添加@EnableSwaggerPlugins注解。
@EnableSwaggerPlugins
@SpringBootApplication
public class FrontDemoApplication {
public static void main(String[] args) {
SpringApplication.run(FrontDemoApplication.class, args);
}
}
5|0总结
spring启动流程面试回答简单的starter代码编写可以减少新模块的复杂性,只需要简单的配置就可以使⽤相应的特性,减少复制代码不必要的错误。⽰例代码地址:
以上所述是⼩编给⼤家介绍的springboot中swagger快速启动流程,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
如果你觉得本⽂对你有帮助,欢迎转载,烦请注明出处,谢谢!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论