网络知识 娱乐 开发技术-postman可以请求通,代码请求不通

开发技术-postman可以请求通,代码请求不通

使用 FeignClient 调用第三方的接口,在测试环境是没有问题的,但是调用对方的生产环境,出现了 400 错误

400 Bad request

Your browser sent an invalid request.

联系了对方,并没有找到问题在哪。然后使用 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 错误就是客户端的问题,可能是请求参数的格式、请求方法等不对引起的

又是收获的一天,古德拜