初始代码
This commit is contained in:
64
yunzhupaas-boot-common/yunzhupaas-common-swagger/pom.xml
Normal file
64
yunzhupaas-boot-common/yunzhupaas-common-swagger/pom.xml
Normal file
@@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>yunzhupaas-boot-common</artifactId>
|
||||
<groupId>com.yunzhupaas</groupId>
|
||||
<version>5.2.0-RELEASE</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>yunzhupaas-common-swagger</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- core模块 -->
|
||||
<dependency>
|
||||
<groupId>com.yunzhupaas</groupId>
|
||||
<artifactId>yunzhupaas-common-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
|
||||
<version>${knife4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
|
||||
<version>${knife4j.version}</version>
|
||||
</dependency>-->
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>boot3</id>
|
||||
<activation>
|
||||
<jdk>[17,)</jdk>
|
||||
</activation>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>boot2</id>
|
||||
<activation>
|
||||
<jdk>(,17)</jdk>
|
||||
</activation>
|
||||
<dependencies>
|
||||
<!--引入Knife4j的官方start包,该指南选择Spring Boot版本<3.0,开发者需要注意-->
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
</project>
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.yunzhupaas;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import org.springdoc.webmvc.core.providers.SpringWebMvcProvider;
|
||||
import org.springframework.web.servlet.handler.AbstractHandlerMethodMapping;
|
||||
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* SpringDoc默认展示全部接口
|
||||
* 过滤未添加@Operation的接口
|
||||
*/
|
||||
public class MySpringWebMvcProvider extends SpringWebMvcProvider {
|
||||
|
||||
@Override
|
||||
public Map getHandlerMethods() {
|
||||
if (this.handlerMethods == null) {
|
||||
Map<String, RequestMappingHandlerMapping> beansOfTypeRequestMappingHandlerMapping = applicationContext.getBeansOfType(RequestMappingHandlerMapping.class);
|
||||
this.handlerMethods = beansOfTypeRequestMappingHandlerMapping.values().stream()
|
||||
.map(AbstractHandlerMethodMapping::getHandlerMethods)
|
||||
.map(Map::entrySet)
|
||||
.flatMap(Collection::stream)
|
||||
.filter(v -> v.getValue().hasMethodAnnotation(Operation.class))
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a1, a2) -> a1, LinkedHashMap::new));
|
||||
}
|
||||
return this.handlerMethods;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.yunzhupaas;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.info.Info;
|
||||
import io.swagger.v3.oas.models.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.models.security.SecurityScheme;
|
||||
import com.yunzhupaas.util.Constants;
|
||||
import org.springdoc.core.models.GroupedOpenApi;
|
||||
import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
|
||||
import org.springdoc.webmvc.core.providers.SpringWebMvcProvider;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Swagger配置类
|
||||
*
|
||||
* @author 云筑产品开发平台组
|
||||
* @version V3.1.0
|
||||
* @copyright 深圳市乐程软件有限公司(http://www.szlecheng.cn)
|
||||
* @date 2024-03-23
|
||||
*/
|
||||
@Configuration
|
||||
public class SwaggerConfig implements WebMvcConfigurer {
|
||||
|
||||
@Value("${spring.application.name:}")
|
||||
private String name;
|
||||
|
||||
@Value("${config.SoftVersion:}")
|
||||
private String version;
|
||||
|
||||
@Bean
|
||||
public OpenAPI openAPI() {
|
||||
OpenAPI openAPI = new OpenAPI();
|
||||
openAPI.info(apiInfo());
|
||||
openAPI.schemaRequirement(Constants.AUTHORIZATION, security());
|
||||
return openAPI;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {
|
||||
return openApi -> {
|
||||
if (openApi.getTags()!=null){
|
||||
openApi.getTags().forEach(tag -> {
|
||||
Map<String,Object> map=new HashMap<>();
|
||||
map.put("x-order", RandomUtil.randomInt(0,100));
|
||||
tag.setExtensions(map);
|
||||
});
|
||||
}
|
||||
if(openApi.getPaths()!=null){
|
||||
openApi.addExtension("x-test123","333");
|
||||
openApi.getPaths().addExtension("x-abb",RandomUtil.randomInt(1,100));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GroupedOpenApi userApi(){
|
||||
String[] paths = { "/**" };
|
||||
return GroupedOpenApi.builder().group(name)
|
||||
.pathsToMatch(paths)
|
||||
.addOperationCustomizer((operation, handlerMethod) -> operation.security(
|
||||
Collections.singletonList(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))
|
||||
))
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置文档信息
|
||||
* @return
|
||||
*/
|
||||
private Info apiInfo() {
|
||||
return new Info()
|
||||
.title("接口文档")
|
||||
//描述
|
||||
.description("yunzhupaas接口文档")
|
||||
.version(version);
|
||||
}
|
||||
|
||||
private SecurityScheme security() {
|
||||
SecurityScheme securityScheme = new SecurityScheme();
|
||||
securityScheme.setType(SecurityScheme.Type.APIKEY);
|
||||
securityScheme.setName(Constants.AUTHORIZATION);
|
||||
securityScheme.setIn(SecurityScheme.In.HEADER);
|
||||
return securityScheme;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Lazy(false)
|
||||
public SpringWebMvcProvider springWebProvider(){
|
||||
return new MySpringWebMvcProvider();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
|
||||
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user