首先描述下遇到的问题,第一个是:页面放在了单独的一个模块里面(其实就是一个jar包),用idea跑项目,所有的静态页面均可以正常访问。但是打成jar包跑起来后却访问不了静态页面(准确的说是static下面的css,js等文件),其中swagger页面也访问不了。更诡异的问题是,有的时候打的包可以访问,有的时候打的包不可以访问,笔者比对两个jar包,发现其实是一摸一样,百度了好久都是差不多的方式。
最后反思总结,本项目中的WebMvcConfigurationSupport配置放在另外一个公共jar包里面,后面我的想法是如果把它提前,放到swagger配置里面(和swagger配置一起加载),配置如下:
@Configuration
@EnableSwagger2
public class Swagger2 extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX + "/static/");
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
super.addResourceHandlers(registry);
}
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enableUrlTemplating(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com.test.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("测试中心")
.description("测试一下下")
.termsOfServiceUrl("http://www.baidu.com")
.version("1.1.1")
.build();
}
按照上述配置调整后,确实解决了上述问题,经验证后面打包没有再出现类似问题,一切访问都正常。
随之而来的第二个问题是:按照第一个问题的解决方式调整后,发现fonts下面的文件ttf和woff显示不出来,报错提示:OTS parsing error: incorrect file size in WOFF header。
原因应该是maven对其中的内容做了某些转换,导致文件错误吧(推测而已,未经验证),解决方式其实也是比较简单,在pom文件添加如下代码即可。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.ttf</exclude>
<exclude>**/*.woff</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.ttf</include>
<include>**/*.woff</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>woff2</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>