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 18 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
SpringCloud Feign请求头删除修改的操作代码
Mar 20 Java/Android
Spring Boot 底层原理基础深度解析
Apr 03 Java/Android
Java工作中实用的代码优化技巧分享
Apr 21 Java/Android
Java设计模式之代理模式
Apr 22 Java/Android
Spring boot admin 服务监控利器详解
Aug 05 Java/Android
OpenFeign实现远程调用
Aug 14 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
Python中的rjust()方法使用详解
2015/05/19 Python
python获取地震信息 微信实时推送
2019/06/18 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
如何利用python读取micaps文件详解
2020/10/18 Python
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
技术经理的自我评价范文
2013/12/03 职场文书
24岁生日感言
2014/01/13 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
义和团口号
2014/06/17 职场文书
生物学专业求职信
2014/07/23 职场文书
异地年检委托书范本
2014/09/24 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
卖房授权委托书样本
2014/10/05 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书