使用@requestbody来指定传参对象
@requestmapping(value = "/v2/mattercode/gencode", method = requestmethod.post) resultrespon<string> getcode(@requestbody mattercodebo mattercodebo);
注意:@requestbody在一个方法内有且只有一个,不能同时存在两个!
普通传参使用@requestparam来指定参数
@requestmapping(value = "正方形的周长公式taskapicontroller/getall", method = requestmethod.post)list<taskvo> getall(@requestparam("name") string name);
注意:@安全隐患怎么写requestparam必须指定参数名(”name”),否则报错:requestparam.value() was empty on parameter 0
首先再次强调feign是通过http协议调用服务的,重点是要理解这句话,
如果feignclient中的方法有@postmapping注解 ,则微服务taskapicontroller中对应方法的注解也应当保持一致为@postmapping,如果不一致,则会报404的错误
调用失败后会触发它的熔断机制,如果@feignclient中不写@feignclient(fallback = taskfeignclientdegraded.class),会直接报错
11:00:35.686 [http-apr-8086-exec-8] debug c.b.p.m.b.c.abstractbacontroller – got an exception
com.netflix.hystrix.exception.hystr救生员ixruntimeexception: taskfeignclient#getall() failed and no fallback available.
at com.netflix.hystrix.abstractcommand$22.call(abstractcommand.java:819)
at com.netflix.hystrix.abstractcommand$22.call(abstractcommand.java:804)
报错信息:
feign.feignexception:status 400 reading xxx#xxxx(string); content:
原因:因为feign的那个方法使用的@reqestparam注解,这个接收的参数长度过长造成的,这也是feign就算使用post方法,参数也会放在请求地址后面,而不是放在请求体里面。
解决办法:将参数封装成对象,使用@requestbody标明参数
另外需要注意,feign不支持使用getmapping 和postmapping
@requestmapping(value="ur/save",method=requestmethod.post)
复杂对象使用@requestbody进行注解,同时接收端也需要使用@requestbody这个注解。
我遇一个坑:
消费端使用了@requestbody而服务端没有接收@requestbody,这时参数会接收不完整。
//消费端 @requestmapping(value="女排精神作文ur/save",method=requestmethod.post) public ur save(@requestbody ur ur);//服务端@postmapping("save") public ur save(@requestbody ur ur) { system.out.println(ur); return urrvice.save(ur); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887活力工场551.com。
本文发布于:2023-04-06 04:04:52,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/a00e7ee1a4e7a2b3a28510496fc2ba3f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:SpringCloud:feign对象传参和普通传参及遇到的坑解决.doc
本文 PDF 下载地址:SpringCloud:feign对象传参和普通传参及遇到的坑解决.pdf
留言与评论(共有 0 条评论) |