Feign踩坑记录

来源:6-3 【注重领会】基于 Feign 实现微服务调用

某不入流码农

2019-03-20

老师好!在学习第六章过程中,遇到一些feign的问题并做了解决记录,请老师看看是否正确!
1.在Feign接口中的方法形参,使用注解@RequestParam(value=“xxx”),@RequestHeader(value=“xxx”)时,value属性必须指定
原因:在Feign中绑定参数必须通过value属性来指明具体的参数名,不然会抛出IllegalStateException异常,value不能空

2.Feign接口中为参数添加@RequestParam(“name”)注解或者@RequestBody注解,前者多用于一到多个简单参数的指定,后者多用于复杂对象,且Feign接口的方法要明确指定请求的类型(使用@RequestMapping(method=xxx)或者@PostMapping,@GetMapping等等)
原因:如果不加默认的注解,Feign接口则会对方法参数默认加上@RequestBody注解,而RequestBody一定是包含在请求体中的,GET请求方式无法包含。就算页面发送的是GET请求,也会强制转成POST请求,不但参数拿不到,如果真正微服务使用的是@GetMapping之类的注解来接收GET请求,而请求到达前被强制转换成了POST,则会抛出405请求方式错误。

写回答

1回答

张勤一

2019-03-20

同学你好:

    你这里说的都是正确的。

    1. 在 Controller 中,如果你的参数名与 Get 请求中传递的参数名一致的话, @RequestParam 中的 value 是可以省略的。可以学习下 Spring 和 SpringMVC 基础

    2. 对于 POST 请求,对象之间的传递需要经过序列化和反序列化,@RequestBody 即完成了对象需要序列化的标识,这是 SpringMVC 规定的。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2
0

Spring Cloud微服务架构 设计实现广告系统

广告营销系统,未来大中型企业的标配

2136 学习 · 927 问题

查看课程