Spring在具有通配符控制器路由的同时提供静态内容
我的应用程序是使用前端的主干和后端的spring框架构建的。这是一个单独的html应用程序。路由是由骨干网处理的,因此我有一个具有以下结构的后端路由:
@RequestMapping(value="/**", method=RequestMethod.GET)public String Pages()
{
return "index";
}
将所有内容都指向我的index.html。问题是静态内容文件也指向此路由,我不希望这样做。我尝试通过覆盖静态内容的addResourceHandler方法来配置WebMvcConfigurerAdapter,但是它不起作用。
@Configurationpublic class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/js/**").addResourceLocations("/resources/js");
}
}
我如何将除/ js / 之外的所有路由都指向我的index.html?
谢谢
回答:
首先,映射到的控制器方法/**
将优先于任何资源请求。您可以通过增加的优先级来解决此问题ResourceHandlerRegistry
。使用registry.setOrder(Ordered.HIGHEST_PRECEDENCE)
以下addResourceHandlers
方法添加呼叫StaticResourceConfiguration
:
@Configurationpublic class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
registry.addResourceHandler("/js/**").addResourceLocations("/resources/js");
}
}
第二件事是,默认情况下,Spring
Boot默认为您配置两个资源处理程序,一个映射到/**
,一个映射到/webjars/**
。由于上述更改,现在,此方法将优先于还映射到的控制器中的方法/**
。为了解决这个问题,您应该通过以下设置关闭默认资源处理application.properties
:
spring.resources.addMappings=false
以上是 Spring在具有通配符控制器路由的同时提供静态内容 的全部内容, 来源链接: utcz.com/qa/405355.html