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中重写父类方法加不加@Override详解
Jun 21 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
IDEA使用SpringAssistant插件创建SpringCloud项目
Jun 23 Java/Android
Spring Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
spring boot项目application.properties文件存放及使用介绍
Jun 30 Java/Android
Java Kafka 消费积压监控的示例代码
Jul 01 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
详解Android中的TimePickerView(时间选择器)的用法
Apr 30 Java/Android
java实现自定义时钟并实现走时功能
Jun 21 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
SpringBoot详解执行过程
Jul 15 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
一次编写,随处运行
2006/10/09 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
解析python的局部变量和全局变量
2019/08/15 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
《雪地里的小画家》教学反思
2014/02/22 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
机关职员工作检讨书
2014/10/23 职场文书
鸡毛信观后感
2015/06/11 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫