springcloud中使用feign方式上传文件,spring cloud 怎么通过feign调用服务
目录
假造对象传递参数和普通传递参数和遇到的坑对象传递参数-普通传递参数遇到的坑-遇到的坑-2假造复杂参数对象传递注意事项。传递复杂的参数对象需要在传递过程中进行Post。
feign对象传参和普通传参及遇到的坑
00-1010使用@RequestBody指定参数对象。
@ request mapping(value=/v2/matter code/gen code ,method=RequestMethod。POST)ResultResponseString get code(@ request body MatterCodeBO MatterCodeBO);注意:@RequestBody在一个方法中有且只有一个,不能同时有两个!
00-1010普通参数使用@RequestParam指定参数。
@ request mapping(value= taskApiController/get all ,method=RequestMethod。POST)listaskvo get all(@ request param( name )字符串名称);注意:@RequestParam必须指定参数名( name ),否则将给出错误:requestparam.value()在parameter0上为空。
00-1010首先再次强调一下,Feign通过http协议调用服务。关键是要理解这句话,
如果FeignClient中的方法有@PostMapping注释,那么微服务TaskApiController中对应方法的注释也应该和@PostMapping一致。否则,将报告错误404。
当呼叫失败时,它将触发其熔断机制。如果@FeignClient(fallback=taskfeengclientdegraded . class)没有用@ FeignClient编写,会直接报错。
11:00:35.686[http-apr-8086-exec-8]DEBUG c . b . p . m . b . c . abstractbasecontroller-得到一个异常com . Netflix . hy strix . exception . hystrixruntimeexception : TaskFeignClient # getAll()失败,没有回退可用。at com . Netflix . hy strix . abstract command $ 22 . call(abstract command . Java :819)at com . Netflix . hy strix . abstract command $ 22 . call(abstract command . Java :804)
00-1010错误消息:
假装。FeignException:status 400读取xxx#xxxx(字符串);内容:
因为原因:,中的feign方法使用了@ReqestParam注释,所以收到的参数太长,这就是为什么即使feign使用post方法,参数也会放在请求地址后面,而不是放在请求正文中。
将解决办法:参数封装到对象中,并使用@RequestBody来表示参数。
对象传参
00-1010还要注意,Feign不支持使用GetMapping和PostMapping。
@RequestMapping(value=用户/保存,method=RequestMethod。帖子)
00-1010复杂对象用@RequestBody注释,接收方也需要使用注释@RequestBody。
我遇一个坑:
当消费者使用@RequestBody,而服务器没有接收到@RequestBody时,将会不完整地接收到该参数。
//consumer @ request mapping(value= user/save ,method=request method . post)public user save(@ requestbodyuser user);//server @ post mapping( save )public user save(@ request body user){ system . out . println(user);返回UserService.save(用户);}以上是我的亲身经历。希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。