记一次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);