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 相关文章推荐
springboot @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
解析Java中的static关键字
Jun 14 Java/Android
Java各种比较对象的方式的对比总结
Jun 20 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
Java获取e.printStackTrace()打印的信息方式
Aug 07 Java/Android
Java数据开发辅助工具Docker与普通程序使用方法
Sep 15 Java/Android
spring注解 @PropertySource配置数据源全流程
Mar 25 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Java中API的使用方法详情
Apr 06 Java/Android
httpclient调用远程接口的方法
Aug 14 Java/Android
Spring boot实现上传文件到本地服务器
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
PHP页面间传递参数实例代码
2008/06/05 PHP
php mysql索引问题
2008/06/07 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
微信小程序自定义联系人弹窗
2020/05/26 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
Python requests模块cookie实例解析
2020/04/14 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
用Python 执行cmd命令
2020/12/18 Python
数据员岗位职责
2013/11/19 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
中式婚礼主持词
2014/03/13 职场文书
村党支部换届选举方案
2014/05/02 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
家庭贫困证明
2014/09/23 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
退税申请报告怎么写
2015/05/18 职场文书
民事二审代理词
2015/05/25 职场文书
Java输出Hello World完美过程解析
2021/06/13 Java/Android