暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Feign调用GET出现MethodNotAllowed问题

叶归林 2020-06-24
1716

1.前言

springCloud 广泛运用,很多组件官方已给我们封装成×××-starter,但是当我们不了解其内部逻辑时,就会产生很多奇奇怪怪的bug。楼主本人就遇到了在feign调用时,默认转换请求方法会把GET转换为POST,造成MethodNotAllowed异常。既然遇到了,就来说说这个问题,也给自己留个档。

2.详述

起因也是项目组架构调整,整体API需要满足restFul风格。当微服务之间调用时,有些需要请求GET方法,有些是POST方法。如下图

服务提供方

题点

1.当我使用GET方法,并且参数中使用@requestBody注解式,在服务提供方会产生MethodNotAllowed异常,一开始我以为是@requestBody注解问题。
2.我使用GET方法,参数中删掉@requestBody注解,还是出现MethodNotAllowed异常
由此我产生疑问,是不是这个框架有问题?然后去官网疯狂考古。得出下图的结论

原因

feign组件远程调用时,会根据你传递的参数来转换请求方法。

当你封装的是一个实体时,会自动将参数放在requestBody中,方法转为POST

解决思路

1.当GET请求,有多参数时。需要把参数拆解出来,放置为多参数并用@requestParam注解修饰传递。

2.GET请求多参数传递时,封装成Map对象,使用@requestParam注解传递。

工具

从网上找了个转换工具类,有需要的可以收藏。

jackson_objectmapper

它主要是处理Object和Json的互相转换。

完结(现在我也开启了赞赏账户了哦,感觉对你有帮助可以打赏哦!O(∩_∩)O哈哈~)

文章转载自叶归林,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论