当前位置: 首页 > 面试题库 >

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

孟树
2023-03-14
问题内容

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

谢谢


问题答案:

首先,映射到的控制器方法/**将优先于任何资源请求。您可以通过增加的优先级来解决此问题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


 类似资料:
  • 我正在用< code>Jetty服务器运行一个Spring Boot应用程序。API由< code>Jersey servlet提供服务。静态内容放在< code>src/main/static和< code > src/main/private-static 中。 问题#1未提供中的静态内容 中的内容是公开的,可以自由访问。据此:https://docs.spring.io/spring-boo

  • 问题内容: 我无法让Spring-boot项目提供静态内容。 我已经放在一个命名的文件夹下。在其中,我有一个名为的文件夹。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。 我试图把静态文件中,并但没有任何工程。 如果我我可以看到文件在正确文件夹的jar中:例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404 有什么想法为什么

  • 我在web.php添加了以下路线,但它不起作用。 我的控制器如下所示,我正在使用Ajax发送数据,但收到的错误是Method not allowed exception。 Ajax代码----------------

  • 情景: 我已将静态数据放在webroot/*文件夹位置,服务器根据请求提供这些数据。 我有很多路由API的路由。 路由器代码: 文件夹webroot包含以下文件: 索引。css 索引。html 图像/图像。jpg公司 问题: 需要在路由不匹配时提供webroot/index.html文件(它不起作用;返回值**'资源未找到')**:如果我请求 /xyz/abc数据,则应提供webroot/inde

  • 问题内容: 使用上下文路径时,Spring Boot中的静态内容出现问题。即:我希望将我的应用程序部署到 当我在没有上下文路径的情况下运行应用程序时,一切正常,Spring Boot会找到并运行我的文件(来自资源/ templates /,我正在使用)和JS文件(来自资源/ static / js /),但是当我添加上下文路径时与: 要么 然后这些页面仍由JS文件显示,产生 404错误 。 我已经

  • 问题内容: 我正在尝试使用Gorilla工具包的软件包来路由Go Web服务器中的URL,我有以下Go代码: 目录结构为: 像这样引用Javascript和CSS文件: 当我在Web浏览器中访问内容时,内容已成功交付,但是,所有和URL都返回404。 如何获得程序以将文件提供到子目录之外? 问题答案: 我想您可能正在寻找…

  • 我使用Spring Boot2.0.2和Freemarker作为我的web应用程序。我的webapp的静态内容无法加载嵌套/前缀控制器。 spring Boot:将REST与静态内容分离 如有任何帮助,我们将不胜感激。

  • 我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat