记一次feignclient发送请求服务端接收不到正确参数排查
服务端代码:
@Operation(summary = "Create team")@PostMapping("post")@RequiresPermissions("team:add")public RestResponse addTeam(@Valid Team team) {this.teamService.createTeam(team);return RestResponse.success();}
可以看出,服务端接口为Post请求,传参对象为Team
Team中有name和description两个属性。
Feign客户端的代码为:
@PostMapping(value = "/team/post")RestResponse createTeam(@RequestBody Team team);
当我使用客户端调用接口时,服务端在保存数据到数据库时报错,无其余信息。
于是查看原服务的前端调用,发现前端传参:
- 传参方式为:From Data
name=PUB_SIT&descrition=xxx
formdata类型的post请求,参数看起来会像get传参一样 - 然而常见的post传参方式为:Request Payload
参数为body的形式:
{"name": "PUB_SIT","description":"xxx"
}
故问题出在这里。
解决方案:在feignclient接口方法中使用consumes属性设置请求的Content-Type为multipart/form-data
@PostMapping(value = "/team/post", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)RestResponse createTeam(@RequestBody Team team);
参考文档:feignclient发送formdata请求