【问题标题】:Spring serving static content while having wildcard controller routeSpring 在具有通配符控制器路由的同时提供静态内容
【发布时间】:2014-08-23 15:26:21
【问题描述】:

我的应用程序是使用前端的主干和后端的 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?

谢谢

【问题讨论】:

    标签: spring spring-mvc spring-boot


    【解决方案1】:

    第一件事是映射到/** 的控制器方法将优先于任何资源请求。您可以通过增加ResourceHandlerRegistry 的优先级来解决此问题。在StaticResourceConfigurationaddResourceHandlers方法中添加对registry.setOrder(Ordered.HIGHEST_PRECEDENCE)的调用:

    @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 默认为您配置两个资源处理程序,one mapped to /** and one mapped to /webjars/**。由于上述更改,现在这将优先于控制器中也映射到/** 的方法。为了克服这个问题,您应该通过application.properties 中的设置关闭默认资源处理:

    spring.resources.addMappings=false
    

    【讨论】:

    • 我已经尝试过您的解决方案,但每次请求都会出现 404 错误...是的,我确定 application.properties 已加载。
    • 这表明您的请求映射配置不正确。他们在启动时记录。我建议查看该输出以找出问题所在。
    • 我想提一下spring.resources.addMappings 确实禁用了引导的默认资源处理配置(它是缓存属性等),而不仅仅是顾名思义的“不添加默认映射”。因此,如果您只想删除默认映射以省略/**,那么spring.mvc.staticPathPatternspring.resources.staticLocations 更可能是您想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2021-12-10
    • 2017-07-27
    • 2023-03-30
    相关资源
    最近更新 更多