广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot工程下使用OpenFeign的坑及解决
  • 750
分享到

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

2024-04-02 19:04:59 750人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

一、前言 在SpringBoot工程(注意不是SpringCloud)下使OpenFeign的大坑。为什么不用springCloud中的Feign呢? 首先我的项目比较简单(目前只有

一、前言

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 { 
    
    @RequestLine("GET /user/getUserById?id={id}")
    Result getUserById(@Param("id") String userId);
}

调用UserFeign接口


@Service
public class UserService{ 
    
    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();
}

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: SpringBoot工程下使用OpenFeign的坑及解决

本文链接: https://www.lsjlt.com/news/129690.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作