Spring在具有通配符控制器路由的同时提供静态内容

我的应用程序是使用前端的主干和后端的spring框架构建的。这是一个单独的html应用程序。路由是由骨干网处理的,因此我有一个具有以下结构的后端路由:

@RequestMapping(value="/**", method=RequestMethod.GET)

public String Pages()

{

return "index";

}

将所有内容都指向我的index.html。问题是静态内容文件也指向此路由,我不希望这样做。我尝试通过覆盖静态内容的addResourceHandler方法来配置WebMvcConfigurerAdapter,但是它不起作用。

@Configuration

public 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

@Configuration

public 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

回到顶部