405不允许的方法异常:GET调用为“不支持请求方法'T'”,而POST为“不支持请求方法'ST'”

时间:2020-05-07 04:53:10

标签: spring spring-boot spring-webclient

我的项目面临一个非常奇怪的问题。它与使用spring react webclient bulider的rest API调用有关。它在本地和产品上也可以正常工作,但是在向同一个端点发出3或4个请求后,异常地给出了以下错误。 “ org.springframework.web.server.MethodNotAllowedException:405 METHOD_NOT_ALLOWED”不支持请求方法'T'“ 这是有效的异常,因为方法将Get方法转到“ T”,将Post方法转到“ ST”。我无法理解为什么两个起始字符从方法名称处被截断

请帮助我解决此错误。

1 个答案:

答案 0 :(得分:0)

OP 和我一定是唯一经历过这种情况的人,老实说我不知道​​根本原因,但这是我的情况和解决方法。

对我来说,我在 docker 中运行了 2 个服务。一个服务会向另一个服务发出请求。第一个请求总是成功,但随后的请求总是失败。一段时间后,新的请求再次成功。

我推测它一定与持久连接有关。我正在使用 OkHttpClient 库(3.14.9)发出请求。接收请求的服务正在运行 spring webflux,但我不认为服务是问题所在。我可以在第一个服务的容器内使用 curl 向它发出重复的成功请求。

OkHttpClient 默认使用 keep-alive 连接。您可以通过将 Connection 标头设置为 close 来指定不希望保持连接活动的单个请求。一旦我这样做了,所有请求都可以再次运行。

无论出于何种原因,保持活动连接的重用并没有发送整个请求。它总是截断方法的前 2 个字符,这就是 Request method 'T' not supported 的原因。也许第一个请求没有正确结束并且吃掉了第二个请求的前 2 个字符。我不知道根本原因。可能是 OkHttpClient 的一个错误