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

时间:2014-07-02 17:56:03

标签: spring spring-mvc spring-boot

我的应用程序是使用前端的骨干和后端的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 / **和/ assets / **以外,我怎样才能指向我的index.html的每条路线?

谢谢

1 个答案:

答案 0 :(得分:9)

首先,您映射到/**的控制器方法将优先于任何资源请求。您可以通过增加ResourceHandlerRegistry的优先级来解决此问题。在registry.setOrder(Ordered.HIGHEST_PRECEDENCE)的{​​{1}}方法中添加对addResourceHandlers的调用:

StaticResourceConfiguration

第二件事是,默认情况下,Spring Boot默认为您配置两个资源处理程序one mapped to /** and one mapped to /webjars/**。由于上述更改,现在优先于控制器中的方法,该方法也会映射到@Configuration public class StaticResourceConfiguration extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.setOrder(Ordered.HIGHEST_PRECEDENCE); registry.addResourceHandler("/js/**").addResourceLocations("/resources/js"); } } 。要解决此问题,您应该通过/**

中的设置关闭默认资源处理
application.properties