在Spring Boot应用中,静态资源放行是个不可或缺的部分。这些资源包括展示在Web应用页面上的图片、CSS和JavaScript等文件。在本文中,我们将通过几个方面来讲述如何在Spring Boot应用中放行静态资源。
一、静态资源文件夹
Spring Boot默认会将所有位于classpath:/static、classpath:/public和classpath:/resources下的文件夹作为静态资源文件夹,并且访问时不需要经过Controller映射,即它们都可以直接通过浏览器路径访问。因此,我们只需要将jar包中的静态文件放入到这些文件夹中即可。
二、自定义静态资源路径
如果我们需要自定义静态资源路径,可以使用addResourceHandler和addResourceLocations方法来实现。其中,addResourceHandler用于指定对外暴露的访问路径,addResourceLocations用于指定静态资源文件夹的实际路径。
@Configuration public class MyWebConfigurer implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/mystatic/**").addResourceLocations("classpath:/mystatic/"); } }
上面的代码用于将/mystatic路径映射到classpath:/mystatic/文件夹。这样,我们只需要将要放置到静态资源文件夹的文件放到classpath:/mystatic/路径下即可。
三、放行指定请求路径
在某些场景下,我们需要忽略某些请求路径中包含静态资源文件名的部分。比如请求路由为/mypage,但是该页面需要引用静态资源,此时请求路径中将会包含/mypage/js/myscript.js等静态资源文件名。此时,我们可以使用WebMvcConfigurer#addViewControllers方法来添加视图控制器来忽略这些请求。例如,下面的代码将会忽略所有匹配**/js/**和**/css/**的请求。
@Configuration public class MyMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/**/js/**").setViewName("forward:/"); registry.addViewController("/**/css/**").setViewName("forward:/"); } }
四、放行Swagger请求
Swagger是一个非常流行的API文档工具,通常会将文档UI的HTML文件和JavaScript文件放在Spring Boot应用的classpath:/META-INF/resources/webjars/swagger-ui/{version}/文件夹下。在Swagger的配置中,我们需要开放相关URL才能正常访问。下面是一个放行Swagger请求的示例代码。
@Configuration @EnableSwagger2 public class SwaggerConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } }
五、放行自定义文件类型
在Spring Boot应用中,有些时候我们可能需要放行一些非常规的文件类型,比如PDF、TXT等。在WebMvcConfigurer的配置类中,我们可以使用ContentNegotiationConfigurer来设置允许访问的文件类型。例如,我们可以以下面的代码来放行PDF文件。
@Configuration public class WebConfigurer implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.mediaType("pdf", MediaType.APPLICATION_PDF); } }
六、总结
Spring Boot静态资源放行是一个比较基础、必须掌握的应用开发技巧。本文介绍了使用默认静态文件夹、自定义静态文件夹路径、放行指定请求路径、放行Swagger请求和放行自定义文件类型等几个方面的技巧。通过掌握这些技巧,我们能够更加灵活、高效地开发Spring Boot应用。