在微服务开发中SpringCloud全家桶集成了OpenFeign用于服务调用,SpringCloud的OpenFeign使用SpringMVCContract来解析OpenFeign的接口定义。但是SpringMVCContract的Post接口解析实现有个巨坑,就是如果使用的是@RequestParam传参的Post请求,参数是直接挂在URL上的。最近线上服务器突然经常性出现CPU高负载的预警,经过排查发现日志出来了大量的OpenFeign跨服务调用出现400的错误。一般有两种情况:。通过分析发现400是java应用返回的,那么可以确定是OpenFeign客户端发起跨服务请求时出现异常了。在下图可以看出请求参数不再挂在URL上了问题虽然解决了,但采用的不是官方推荐的方案,这里将官方推荐的这种@RequestBody的解决方法也贴出来。使用@RequestBody解决,需要4个步骤:编写请求参数Bean调整接口声明

SpringCloud OpenFeign Post请求400错误解决方案

SpringCloud OpenFeign Post请求400错误解决方案

SpringCloud OpenFeign Post请求400错误解决方案

SpringCloud OpenFeign Post请求400错误解决方案