导入所需依赖
<dependencies>
<!-- 接口展示插件 -->
<!-- swagger ui -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
<!-- 第三方接口ui展示插件,写此文章时尚未实现openapi3.0协议 -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-ui</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-maven-plugin</artifactId>
<version>0.2</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
application.yml 配置(可选)
spring:
resources:
cache:
period: 31536000
cachecontrol:
max-age: 31536000
chain:
html-application-cache: true
enabled: true
strategy:
content:
enabled: true
paths: /webjars/swagger-ui/**.*
WebMvcConfigurer 配置
/**
*
* 启动 springMvc自动配置即可,注意若是 extends WebMvcConfigurationSupport,需要自己配置
* 不理解的话请 Google WebMvcConfigurationSupport 和 WebMvcConfigurer 的区别,建议 implements WebMvcConfigurer
*/
@Configuration
public class SystemWebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//上传文件配置
// registry.addResourceHandler("/upload/**").addResourceLocations("file:///" + uploadFilePath);
// spring boot 默认的资源位置配置
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/", "classpath:/public/",
"classpath:/resources/", "classpath:/META-INF/resources/","/");// 静态资源路径
// swagger3 配置
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/**/swagger-ui/**").addResourceLocations("/webjars/");
registry.addResourceHandler("/**/favicon.ico").addResourceLocations("classpath:/**/favicon.ico");
// registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/").resourceChain(false)
// .addResolver(new WebJarsResourceResolver()).addResolver(new PathResourceResolver());
}
}
统一返回数据格式配置
import org.springframework.core.MethodParameter;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.method.support.ModelAndViewContainer;
public class HandlerMethodReturnValueHandlerProxy implements HandlerMethodReturnValueHandler {
private static final int STATUS_CODE_SUCCEEDED = 200;
//返回对象处理方法所在类的白名单
private String[] whiteNames = new String[]{"org.springdoc."};
private HandlerMethodReturnValueHandler proxyObject;
public HandlerMethodReturnValueHandlerProxy(HandlerMethodReturnValueHandler proxyObject) {
this.proxyObject = proxyObject;
}
@Override
public boolean supportsReturnType(MethodParameter returnType) {
return proxyObject.supportsReturnType(returnType);
}
@Override
public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest) throws Exception {
boolean isProxy = true;
for (String whiteName : whiteNames) {
if (returnType.getDeclaringClass().getName().contains(whiteName)) {
isProxy = false;
break;
}
}
if (isProxy) {
R hs = new R(returnValue);
proxyObject.handleReturnValue(hs, returnType, mavContainer, webRequest);
} else {
proxyObject.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
}
}
}
验证
打开浏览器 http://127.0.0.1/swagger-ui.html