feignClient传参(参数为对象类型)的一个坑
客户端
@RequestMapping(value = "/friendCircleComment/comment",method = RequestMethod.POST)
R comment(@RequestBody FriendCircleComment friendCircleComment);
服务端
1 @RequestMapping(value = "/comment") 2 public R comment(@RequestBody FriendCircleComment friendCircleComment){ 3 friendCircleCommentService.comment(friendCircleComment); 4 return new R(); 5 }
这么传参是没问题的,服务端也能接收到
但是,问题来了,
小程序的post请求的header必须为
header:{ 'content-type':'application/x-www-form-urlencoded' },
导致后台为@RequestBody接收不到参数,
feignClient默认参数请求类型是
header:{ 'content-type':'application/json' },
定义@RequestBody接收参数的headers类型必须为 header:{ 'content-type':'application/json' },
所以这样就有冲突,feignClient和定义为'content-type':'application/x-www-form-urlencoded'的请求接口不能共用
解决方法
不使用对象接收,使用基本类型接收
如下
客户端
1 @RequestMapping(value = "/friendCircleComment/comment",method = RequestMethod.POST) 2 R comment(@RequestParam(value = "friendCircleId",required = false)Integer friendCircleId, 3 @RequestParam(value = "memberId",required = false)Integer memberId, 4 @RequestParam(value = "parentId",required = false)Integer parentId, 5 @RequestParam(value = "comment",required = false)String comment, 6 @RequestParam(value = "replyMemberId",required = false)Integer replyMemberId);
服务端
1 @RequestMapping(value = "/comment") 2 public R comment(@RequestParam(value = "friendCircleId",required = false)Integer friendCircleId, 3 @RequestParam(value = "memberId",required = false)Integer memberId, 4 @RequestParam(value = "parentId",required = false)Integer parentId, 5 @RequestParam(value = "comment",required = false)String comment, 6 @RequestParam(value = "replyMemberId",required = false)Integer replyMemberId 7 ){ 8 FriendCircleComment friendCircleComment = new FriendCircleComment(); 9 friendCircleComment.setFriendCircleId(friendCircleId); 10 friendCircleComment.setMemberId(memberId); 11 friendCircleComment.setParentId(parentId); 12 friendCircleComment.setComment(comment); 13 friendCircleComment.setReplyMemberId(replyMemberId); 14 friendCircleCommentService.comment(friendCircleComment); 15 return new R(); 16 }