Java Spring引导返回405而不是404,用于发送到未知URL
免责声明:我不熟悉Java、Spring和Spring Boot 我希望SpringBoot在尝试发布到不存在的URL时返回404。然而,现在它返回一个405,带有一个只包含GET和HEAD的Allow头。有没有办法自定义允许哪些HTTP方法,这样我就可以得到404?我尝试过实现一个定制的ErrorController,但似乎不起作用 要清楚:这是当我发布到一个不应该与我定义的任何端点匹配的URL时,例如 如果需要更多的信息来诊断,我很乐意提供。考虑到我对平台的不熟悉,我不确定什么是相关的。Java Spring引导返回405而不是404,用于发送到未知URL,java,spring-boot,Java,Spring Boot,免责声明:我不熟悉Java、Spring和Spring Boot 我希望SpringBoot在尝试发布到不存在的URL时返回404。然而,现在它返回一个405,带有一个只包含GET和HEAD的Allow头。有没有办法自定义允许哪些HTTP方法,这样我就可以得到404?我尝试过实现一个定制的ErrorController,但似乎不起作用 要清楚:这是当我发布到一个不应该与我定义的任何端点匹配的URL时,例如 如果需要更多的信息来诊断,我很乐意提供。考虑到我对平台的不熟悉,我不确定什么是相关的。HT
HTTP 405(未找到方法)
返回,当URL存在时,,并且您尝试使用在特定URL映射上不允许的HTTP方法
如果在下面的../test
上调用POST,则它将返回HTTP 405,反之亦然
@RequestMapping(value = "/test", method = RequestMethod.GET)
如果任何HTTP方法都没有URL映射,那么它将返回HTTP404
要了解特定启动实例上的所有当前映射,只需转到浏览器即可
http://localhost:8080/mappings
请点击此处:
解决方案是采用如下设置:
春天:
mvc:
静态路径模式:/static/**如果任何人仍遇到此问题:
这是SpringFramework 4.2.4上的一个bug,请参阅
正如上面所说的,这个问题从4.3 RC1开始就得到了解决。您需要用@RequestMapping注释您的方法,并将方法属性设置为所需的类型。创建一个并发布代码。我可以复制这种精确的行为,但我无法解释,这就是为什么我只做了评论而没有回答。我也看到了这一点,提问者的回答是正确的。从源代码看,似乎404只针对无效URL的GET请求返回。对于所有其他请求,无论出于何种原因,框架默认返回405。然而,我的情况是当我发布到一个不存在的URL时。我希望是404,但Spring Boot返回的是405。这是不可能的。如果没有URL映射,它将返回404。如果返回405表示存在映射。用localhost:8080/mappings
中的映射交叉检查它,我得到一个顶部有粉红色错误消息的页面,上面写着:此页面包含以下错误:第25列第1行的错误:下面的“>”是第一个错误之前的页面呈现。
此页面试图呈现的模板是什么?我可以纠正它,但我不知道去哪里看。k139是正确的。如果没有可用的URL映射,它将返回404。如果您试图使用错误的HTTP方法来调用控制器方法,您将得到405。你还需要分享相关的代码,这样人们就可以帮助你,如果没有这些代码,你就只能在黑暗中拍摄。我也看到了这一点,提问者的回答是正确的。从源代码看,似乎404只针对无效URL的GET请求返回。对于所有其他请求,无论出于何种原因,框架默认返回405。可能有一些通用处理程序混淆了这个问题。在我的例子中,它与一个定制的ErrorController
相关。405响应包括Allow:GET
,但执行GET
返回404。报告显示,这一问题已经得到解决,但看起来似乎还没有解决。