SpringBoot工程下使用OpenFeign的坑及解决


Posted in Java/Android onJuly 02, 2021

一、前言

在SpringBoot工程(注意不是SpringCloud)下使OpenFeign的大坑。为什么不用SpringCloud中的Feign呢?

首先我的项目比较简单(目前只有login与业务模块)所以暂时不去引入分布式的架构,但两个服务之间存在一些联系因此需要接口调用接口(实现该操作方式很多我选择了OpenFeign,踩坑之路从此开始。。。)。

二、具体的坑

使用OpenFeign我是直接参考官方的demo,官方的例子写的简洁明了直接套用到自己的工程中即可,自己也可以做相应的封装再调用但demo中使用到了一个feign的核心注解@RequestLine,问题就是出在该注解上。

此时你去做调试如果使用的是GET请求,被请求的接口则会收到POST的请求然后A接口(请求方)就报500的错误,B接口(被请求方)则提示接口不支持POST请求(不支持POST请求是非常正常的,因为B接口定义的method是GET方法)。

以下是我的代码片段:

自定义UserFeign接口

public interface UserFeign { 
    /**
     * 根据userId获取用户信息
     * @param userId
     * @return
     */
    @RequestLine("GET /user/getUserById?id={id}")
    Result getUserById(@Param("id") String userId);
}

调用UserFeign接口

@Service
public class UserService{ 
    /**
     * 通过OpenFegin实现接口调用接口
      * @param userId
     * @return
     */
    public Result getUserByIdWith(String userId) {
        UserFeign userInfo = Feign.builder()
                .decoder(new JacksonDecoder())
                .target(UserFeign.class, "http://localhost:8080");
        Result res = userInfo.getUserById(userId);
        return res;
    }
}

A接口 (请求方)

@RequestMapping(value = "/test", method = RequestMethod.GET)
public Result test() {
    String id = "ad545461300a";
    return userService.getUserByIdWith(id);
}

B接口 (被请求方)

@RequestMapping(value = "/getUserById", method = RequestMethod.GET)
public Result getUserByUserId(@RequestParam(required = true) String id){
    if ("".equals(id)) {
        throw new BusinessException(400, "userId不能为空!");
    }
    Users info = usersService.getUserById(id);
    if (info == null) {
        throw new BusinessException(404, "userId有误!");
    }
    return ResultUntil.success(info);
}

以上代码我做了一些小调整,将调用UesrFeign接口中的方法封装在UserService中并且使用了@service这样我就可以在其它地方直接注入UserService然后调用其中方法。

你会觉得以上代码跟官网的demo没啥区别但官方文档中并没有说明使用@RequestLine注解需要进行配置(事实上需要进行配置的)。

配置代码如下:

@Bean
public Contract useFeignAnnotations() {
    return new Contract.Default();
}

完成以上的配置就可以进行正常的调用了,该问题困扰我好几天了今天终于解决了(真不容易),希望该文章没有白写。

最后感谢这篇文章让我在放弃的时候找到了思路。(调试中遇到的细节问题就不在此进行赘述了)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
教你用Java在个人电脑上实现微信扫码支付
Jun 13 Java/Android
Java新手教程之ArrayList的基本使用
Jun 20 Java/Android
Java如何实现树的同构?
Jun 22 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
Java8中Stream的一些神操作
Nov 02 Java/Android
java代码实现空间切割
Jan 18 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Android自定义scrollview实现回弹效果
Apr 01 Java/Android
Spring Boot接口定义和全局异常统一处理
Apr 20 Java/Android
Java实现注册登录跳转
Jun 16 Java/Android
SpringBoot读取Resource下文件的4种方法
Jul 02 #Java/Android
Java基础-封装和继承
Java 泛型详解(超详细的java泛型方法解析)
SpringBoot集成Druid连接池连接MySQL8.0.11
Java使用httpRequest+Jsoup爬取红蓝球号码
使用Springboot实现健身房管理系统
Java Kafka 消费积压监控的示例代码
You might like
PHP中常用数组处理方法实例分析
2008/08/30 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
python创建和删除目录的方法
2015/04/29 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
Flask之flask-script模块使用
2018/07/26 Python
set在python里的含义和用法
2019/06/24 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python函数式编程实例详解
2020/01/17 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
创联软件面试题笔试题
2012/10/07 面试题
春节联欢会策划方案
2014/05/16 职场文书
本科应届生自荐信
2014/06/29 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
承诺书模板
2014/08/30 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python