使用 FeignClient 调用第三方的接口,在测试环境是没有问题的,但是调用对方的生产环境,出现了 400 错误
<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>
联系了对方,并没有找到问题在哪。然后使用 postman 请求对方生产环境时,是可以正常返回的。
就很奇怪,同一个 jar 只有请求地址不一样,不应该出现这个问题。
查了一些资料,400 错误基本上就是客户端的问题,可能是请求参数、请求方式不对。
此次 400 错误下面,还有
at feign.FeignException.errorStatus(FeignException.java:62)
at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:138)
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
at com.sun.proxy.$Proxy129.XX(Unknown Source)
接着比对 postman 和 代码的不同,发现,在 postman 新建 post 请求时,header 项是8项
组装好 post 请求后(入参为 json 串),header 变为了9项
header 里面多了个 Content-Type
查看代码发现 FeignClient 里面定义的 headers 为
headers = "application/json;charset=UTF-8"
看来问题就是出现在这里了,没有写标头,参数根本就没有生效。将 headers 修改为
headers = "Content-Type=application/json;charset=UTF-8"
重新编译,再次发布,重新请求成功了。
另外测试了一下不加 headers 时,请求返回
{
"msg": "Content type 'application/octet-stream' not supported",
"code": 500
}
猜测对方的测试环境没有对 header 进行检查
总结一下:
1、postman 可以,代码不行,那指定代码有问题
2、400 错误就是客户端的问题,可能是请求参数的格式、请求方法等不对引起的
又是收获的一天,古德拜
相关文章
暂无评论...