项目场景:
最近没事做了一个类似于blog的Web项目,项目里用到了swagger,在开发过程中,发现springboot中的静态资源配置会和swagger的静态资源相冲突。
问题描述:
在引入了thymeleaf后发现页面的一些页面样式静态资源访问不到了,于是百度后发现需要对静态资源映射进行配置
#静态资源映射配置
spring.mvc.static-path-pattern=/static/**
配置后发现页面样式果然好了,但是在访问swagger调试接口时发现页面访问不到了
查看日志提示说是没有找到映射
原因分析:
配置了spring.mvc.static-path-pattern=/static/**只有静态资源的访问路径为/static/**时才会处理请求,且该配置只能配置一个路径,但swagger的页面及静态资源不在此路径下,所以在配置了该项后导致swagger会无法访问
解决方案:
去掉配置文件中spring.mvc.static-path-pattern=/static/**配置,定义配置文件来配置多个资源路径的映射,这里由于swagger的相关静态资源在/META-INF/resources/webjars/这个路径下,所以还需要增加映射"classpath:/META-INF/resources/webjars/"
@Configuration
public class WebConf extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//映射static路径的请求到static目录下
// 静态资源访问路径和存放路径配置
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
// swagger访问配置
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/","classpath:/META-INF/resources/webjars/");
}
}
配置好后swagger就能正常访问了