【问题标题】:Spring Boot Returning 405 instead of 404 for POST to unknown URLSpring Boot 返回 405 而不是 404 用于 POST 到未知 URL
【发布时间】:2015-05-07 13:51:45
【问题描述】:

免责声明:我是 Java、Spring 和 Spring Boot 的新手。

我想让 Spring Boot 在尝试 POST 到不存在的 URL 时返回 404。但是,现在它返回一个 405,带有一个只包含 GET 和 HEAD 的 Allow 标头。有没有办法自定义允许哪些 HTTP 方法以便我得到 404?我已经尝试实现自定义 ErrorController,但这似乎不起作用。

要明确:这是当我发布到一个不应与我定义的端点任何匹配的 URL 时,例如 http://example.com/some-bogus-thing p>

如果需要更多信息来诊断此问题,我很乐意提供。由于我对平台不熟悉,我不确定什么是相关的。

【问题讨论】:

  • 你需要用@RequestMapping注解你的方法,并将method属性设置为想要的类型。
  • 创建一个MCVE 并发布代码。我可以重现这种确切的行为,但我无法解释它,这就是为什么评论而没有答案。
  • 我也看到了这一点,提问者是正确的。查看源代码,似乎只有对无效 URL 的 GET 请求才返回 404。对于所有其他请求,无论出于何种原因,框架默认返回 405。

标签: java spring-boot


【解决方案1】:

HTTP 405 (Method not found) 被返回,when URL exists 并且您尝试使用该特定 URL 映射上不允许的 HTTP 方法。

如果您在.../test 下方调用 POST,那么它将返回 HTTP 405,反之亦然。

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

如果没有任何 HTTP 方法的 URL 映射,那么它将返回 HTTP 404。

要了解该特定启动实例上的所有当前映射,只需转到浏览器

http://localhost:8080/mappings

【讨论】:

  • 是的,您描述的情况是我想要返回 405。但是,我的情况是当我发布到一个 不 的 URL存在。我希望它是 404,但 Spring Boot 返回的是 405。
  • 这是不可能的。如果没有 URL 映射,则返回 404。如果返回 405,则表示有映射。使用来自localhost:8080/mappings 的映射进行交叉检查。
  • 当我转到 localhost:8080/mappings 时,我在顶部看到一个带有粉红色错误消息的页面,上面写着:This page contains the following errors: error on line 1 at column 25: expected '>' Below is a rendering of the page up to the first error. 这是要渲染的模板是什么?我可以纠正它,但我不知道在哪里看。
  • k139 是正确的。如果没有可用的 URL 映射,它将返回 404。如果您尝试使用错误的 HTTP 方法来调用控制器方法,则会得到 405。此外,您需要共享相关代码,以便人们可以帮助您。它在黑暗中拍摄。
  • 我也看到了这一点,提问者是正确的。查看源代码,似乎只有对无效 URL 的 GET 请求才返回 404。对于所有其他请求,无论出于何种原因,框架默认返回 405。
【解决方案2】:

检查这里: https://github.com/spring-projects/spring-boot/issues/4876

解决方案是进行如下设置: 春天: MVC: 静态路径模式:/static/**

【讨论】:

  • 这对我来说是一个很好的线索。可能有一些通用处理程序混淆了这个问题。就我而言,它与自定义 ErrorController 有关。 405 响应包括 Allow: GET,但执行 GET 会返回 404。link 表明已修复此问题,但看起来还没有。
【解决方案3】:

如果有人仍然遇到此问题: 这是spring framework 4.2.4的一个bug,请参考https://github.com/spring-projects/spring-framework/issues/18516 正如它所说,自 4.3 RC1 以来,此问题已得到修复。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 2020-11-12
    • 2019-09-16
    • 2016-04-27
    • 1970-01-01
    • 2018-07-15
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多