当前位置: 首页 > 知识库问答 >
问题:

不支持Request方法“GET”中的静态内容服务

商德泽
2023-03-14

我想在我的项目资源中提供来自我的静态目录的静态内容,但我收到错误:不支持方法“GET”。

我添加了已配置的Spring Security来忽略以“/static/”开头的请求。我已经在WebMvcConfig中添加了资源处理程序,以便在不同的位置查找静态内容,我已经尝试将资源处理程序一起移除。

我尝试将permitAll()添加到“/静态/”路径。

我在谷歌上搜索了错误消息及其各种组合,以找到解决方案。这就是我提出Spring Security和WebMvcConfigs的地方。只是这些并没有解决我的问题。

最后,我尝试将静态文件放在不同的位置。目录结构如下:

\resources\static\hello.css
\resources\static\css\hello.css
\resources\templates\home.html
\resources\templates\error.html

百里香叶工作正常,从模板目录中获取模板。

WebMvcConfig:

// Config Thymeleaf
private static final String VIEWS = "classpath:templates/";

@Bean
public ViewResolver viewResolver() {
    ThymeleafViewResolver resolver = new ThymeleafViewResolver();
    resolver.setTemplateEngine(templateEngine());
    resolver.setCharacterEncoding("UTF-8");
    return resolver;
}

private ISpringTemplateEngine templateEngine() {
    SpringTemplateEngine engine = new SpringTemplateEngine();
    engine.setTemplateResolver(templateResolver());
    return engine;
}

private ITemplateResolver templateResolver() {
    SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
    resolver.setApplicationContext(applicationContext);
    resolver.setPrefix(VIEWS);
    resolver.setSuffix(".html");
    resolver.setTemplateMode(TemplateMode.HTML);
    return resolver;
}

// Enable static resources
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry
            .addResourceHandler("/static/**")
            .addResourceLocations("/resources/static/", "classpath:static/", "/static/", "classpath:resources/static");
}

Spring Security配置:

@Override
public void configure(WebSecurity web) throws Exception {
    web
        .ignoring()
        .antMatchers("/static/**");
}

我希望看到我的css文件,但我看到异常处理程序生成的错误页面,其中包含消息“不支持请求方法'GET'”

下面是我请求css文件时的调试跟踪:

2019-06-07 11:30:29.694 DEBUG 5398 --- [nio-8080-exec-2] o.s.s.w.u.matcher.AntPathRequestMatcher  : Checking match of request : '/static/css/hello.css'; against '/static/**'
2019-06-07 11:30:29.694 DEBUG 5398 --- [nio-8080-exec-2] o.s.security.web.FilterChainProxy        : /static/css/hello.css has an empty filter list
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:200)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:419)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:365)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:65)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:401)
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1232)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1015)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:836)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

共有2个答案

汝岳
2023-03-14

谢谢@Avaruuskadetti你节省了我几个小时的时间

调试: 软件包组织

protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
    if (this.handlerMappings != null) {
        Iterator var2 = this.handlerMappings.iterator();

        while(var2.hasNext()) {
            HandlerMapping hm = (HandlerMapping)var2.next();
            if (this.logger.isTraceEnabled()) {
                this.logger.trace("Testing handler map [" + hm + "] in DispatcherServlet with name '" + this.getServletName() + "'");
            }

            HandlerExecutionChain handler = hm.getHandler(request);
            if (handler != null) {
                return handler;
            }
        }
    }

    return null;
}
令狐建修
2023-03-14

经过数小时的调试,我找到了静态内容不可用的原因!这是因为控制器具有映射,但没有路径:

@PostMapping()

向映射添加路径后,上述配置将正常工作。非常奇怪的是,它搞砸了静态文件的服务!

非常感谢@Ganesh在Spring Boot中提供的不提供静态内容的提示

 类似资料:
  • 我正在处理一个java springboot项目和rest api,我需要在其中一个uri中传递参数,当我使用它时,我会遇到“request method GET not supported”错误 当我使用时它工作正常 但我需要url有“?”在传递参数之前,所以当我替换 用这个 我得到get方法不受支持的错误。

  • 问题内容: 我无法编译以下代码: 出现以下错误: 无法从静态内容引用非静态方法calcArea(int,int) 这是什么意思?我该如何解决该问题..? 编辑: 根据您的建议,我创建了一个新的test()实例,如下所示: 这样对吗?如果我这样做有什么区别… 问题答案: Nanne提出的建议绝对可以解决您的问题。但是,我认为如果现在就养成习惯,在学习Java的早期阶段,尝试尽可能少地使用静态方法(例

  • 日志将输出以下内容。 2017-10-10 14:49:40.946警告5750---[nio-8080-exec-4]O.s.web.servlet.PageNotFound:不支持请求方法“Get”

  • 我刚刚从graphdb 8.4.1升级到graphdb 8.8.1,效果非常好。然而,我无法通过sparql访问triple store并获取更多的[WARN]2019-03-19 21:08:20090[http-nio-7200-exec-8 | o.s.w.s.PageNotFound]请求方法“GET”不受支持 我怎么才能打开它? 提前感谢!

  • 控制器中有以下代码 以及我的jsp中的以下代码。 当用户从cJobNms列表中选择选项时,所选值应显示在控制器方法showTestXsd中。请让我知道我做错了什么。 目前我收到一条消息:不支持请求方法“GET”

  • 我正在尝试调用一个位于类的片段中的方法。现在我得到一个错误:非静态方法checkWriteStoragePermission()不能从静态内容引用。我真的没主意了。我搜索了两天没有任何结果。 我试图在其中调用方法的类: Fragment类中的方法: 我怎么能轻松搞定这个?因为我无法将其转换为静态方法。 亲切的问候,