feign调用第三方接口服务

2023-10-30

前言

做个笔记,下次直接抄
这里需要拿到response的header做验签之类的操作
所以用feign.Response来接收响应

正文

第三方接口调用的feign,自测OK

import com.mea.pay.common.exception.BusinessException;
import com.mea.pay.tpsp.domain.dto.CardCreationRequestContentDTO;
import com.mea.pay.tpsp.domain.dto.CardListRequestContentDTO;
import com.mea.pay.tpsp.domain.dto.CardQueryRequestContentDTO;
import com.mea.pay.tpsp.domain.dto.TpspRequestDTO;
import feign.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;

/**
 * <pre>
 * 华为的IPG平台接口调用
 * // 自测用的url地址:http://127.0.0.1:8089   ${ipg.host}
 * </pre>
 * @author Heng.Wei
 * @date 2022-04-07 08:54:05
 */
@FeignClient(contextId = "tpspFeign", name = "tpspFeign", url = "${ipg.host}", fallbackFactory = TpspFallbackFactory.class)
public interface TpspFeign {

    /**
     * <pre>
     * 新建虚拟卡
     * </pre>
     *
     * @param tpspRequestDTO body参数对象
     * @param tpspHeaderDTO header参数对象
     * @return http response
     * @author Heng.Wei
     * @date 2022-04-08 08:53:59
     */
    @PostMapping("/customer/v1/card/create")
    feign.Response createCard(@RequestBody TpspRequestDTO<CardCreationRequestContentDTO> tpspRequestDTO, @RequestHeader HttpHeaders tpspHeaderDTO);

    /**
     * <pre>
     * 查询虚拟卡
     * </pre>
     *
     * @param tpspRequestDTO body参数对象
     * @param tpspHeaderDTO header参数对象
     * @return http response
     * @author Heng.Wei
     * @date 2022-04-08 08:53:59
     */
    @PostMapping("/customer/v1/card/query")
    feign.Response queryCard(@RequestBody TpspRequestDTO<CardQueryRequestContentDTO> tpspRequestDTO, @RequestHeader HttpHeaders tpspHeaderDTO);

    /**
     * <pre>
     * 查询虚拟卡列表
     * </pre>
     *
     * @param tpspRequestDTO body参数对象
     * @param tpspHeaderDTO header参数对象
     * @return http response
     * @author Heng.Wei
     * @date 2022-04-08 08:53:59
     */
    @PostMapping("/customer/v1/card/list")
    feign.Response listCard(@RequestBody TpspRequestDTO<CardListRequestContentDTO> tpspRequestDTO, @RequestHeader HttpHeaders tpspHeaderDTO);
}

@Component
@Slf4j
class TpspFallbackFactory implements FallbackFactory<TpspFeign> {

    @Override
    public TpspFeign create(Throwable cause) {

        log.error("Tpsp 接口调用失败:{}", cause.getMessage());
        return new TpspFeign() {

            @Override
            public Response createCard(TpspRequestDTO<CardCreationRequestContentDTO> tpspRequestDTO, HttpHeaders tpspHeaderDTO) {
                throw new BusinessException("createCard tpsp request failed");
            }

            @Override
            public Response queryCard(TpspRequestDTO<CardQueryRequestContentDTO> tpspRequestDTO, HttpHeaders tpspHeaderDTO) {
                throw new BusinessException("queryCard tpsp request failed");
            }

            @Override
            public Response listCard(TpspRequestDTO<CardListRequestContentDTO> tpspRequestDTO, HttpHeaders tpspHeaderDTO) {
                throw new BusinessException("listCard tpsp request failed");
            }
        };
    }

}

取responseBody 和 responseHeader

import com.alibaba.cloud.commons.io.IOUtils;
import feign.Response;

// 取responseBody 
Response.Body body = response.body();
String bodyStr = IOUtils.toString(body.asInputStream(), StandardCharsets.UTF_8);

// 取responseHeader
response.headers()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

feign调用第三方接口服务 的相关文章

  • Java 扫描仪问题 (JFrame)

    我正在尝试使用扫描仪来编辑塔防游戏的级别 但是 它不会将级别 图块图像 更新为自定义文件的级别 0 是草 1 是石头 1 是什么都没有 等等 我发现了错误 但如何修复它 我需要添加 更改什么才能消除这个错误 java lang NullPo
  • Java泛型类型要么扩展要么是父类

    我正在寻找一些如下所示的代码 public class Parent
  • Gradle中的build-by-convention深度解释是什么?

    The 摇篮用户指南 http www gradle org docs current userguide userguide html经常提到 Gradle 是陈述性的和用途按惯例构建 这是什么意思 据我了解 这意味着 例如 在java插
  • 在 Spring Security 中创建自定义 PostAuthorize 方法

    我正在尝试创建一个自定义方法 用于预 后授权调用 如下所示 public class CustomLSecurityExpressionHandler extends DefaultMethodSecurityExpressionHandl
  • Spring Boot 删除 Whitelabel 错误页面

    我正在尝试删除白色标签错误页面 所以我所做的是为 error 创建了一个控制器映射 RestController public class IndexController RequestMapping value error public
  • Java Swing 自定义形状(2D 图形)

    我需要绘制自定义形状 现在 当用户单击面板上的几个点时 我使用多边形创建一个形状 public void mouseClicked MouseEvent e polygon addPoint e getX e getY repaint 但我
  • 如何将多个值存储到一个键(java)

    我搜索一个可以存储多个键值对的数据结构 数据基本上是这样的 1 value 1 2 value 2 于是我想到了使用HashMap 遗憾的是 这对我不起作用 因为一个键可能会出现多个值 在上面的例子中 1 value 2 可能是另一个条目
  • 在Java中打印时差最惯用的方法是什么?

    我熟悉以毫秒为单位的打印时间差 long time System currentTimeMillis do something that takes some time long completedIn System currentTime
  • 无法安装 JDK 9,因为“另一个 Java 安装正在进行中”

    我已经在 Windows 10 x64 上使用 JDK 9 一段时间了 但是当我去安装最新的早期版本 b174 时 我首先卸载了以前的版本 像往常一样 然后运行新的安装程序 它失败并显示一个消息框 显示 另一个 Java 安装正在进行中 您
  • Java DocumentBuilder - XML 文件中的缩进错误

    我尝试使用 DocumentBuilder 用 Ja va 编写一个简单的 XML 文件 我期望 XML 文件如下所示
  • egit:设置gitignore忽略所有eclipse项目文件

    我在 github 上有一个项目 我想从中删除所有与 eclipse 相关的文件 并允许克隆它的人使用他们想要的任何 ide 这是该项目 https github com vedi0boy Archipelo https github co
  • Jlist 自定义渲染器

    我正在尝试添加一个我猜你会称其为列表中每个项目的子列表 我构建了一个自定义渲染器 它提供以下输出 正如你所看到的 有些东西不对劲 我没能找到问题的答案 我猜我需要更改面板布局中的某些内容才能获得正确的结果 但不知道是什么 https i s
  • 调用本机方法时返回 java.lang.UnsatisfiedLinkError

    我正在尝试为第三方 DLL 制作 Java 包装器 我创建了自己的 DLL 充当 JNI 和第三方 DLL 之间的中间人 在java中我加载这个DLL很好但是错误java lang UnsatisfiedLinkError sixense
  • 为什么对象可以改变类变量的值?

    由甲骨文提供定义 http docs oracle com javase tutorial java javaOO classvars html 有时 您希望拥有所有对象共有的变量 这是通过 static 修饰符来完成的 声明中带有 sta
  • 错误:找不到符号 ArrayList

    我正在尝试创建某种列表来存储数组 表 中的值 我在这里使用数组列表 但我应该使用列表吗 但是 每次我尝试编译时 它都会引发以下错误 找不到标志 符号 ArrayList类 位置 玩家类 TablePlayer 代码如下 public cla
  • Eclipse java 断点 - 目的是什么?

    我正在学习 Android 教程 刚刚进入调试部分 我想知道断点的用途是什么 我还不能告诉 它实际上停止了应用程序 以便我可以确定它运行到该点 或者我可以设置多个断点并将它们用作标记来从断点到断点检查 停止和运行 我的代码 断点是执行停止的
  • 是否有适合 Java 1.4 和 SE (Swing) 应用程序的优秀 DI 框架?

    我正在寻找一个适用于在 JDK 1 4 下运行的 Java SE Swing 应用程序的依赖注入框架 有没有我可以使用的推荐 DI 框架 Guice 和其他基于注释的框架已经退出 我不想搞乱像 Retroweaver 这样的东西 另外 Sp
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • java银行程序帐户ID不上去?

    每次创建银行帐户时 帐户 ID 都应增加 1 但每次我尝试提取 Id 时 我只会得到帐户 ID 为 0 任何建议 因为我完全按照我学习的书中的方式进行操作而且它仍然没有更新 帐户构造函数 public class BankAccount p
  • 无法以联觉方式绘制像素、Pi 数

    我想将 pi 数字的每个数字打印为彩色像素 因此 我得到一个带有 pi 数字的输入 然后将其解析为一个列表 每个节点包含一个数字 我知道 稍后我将使用一个数组 但我从来没有把它画到屏幕上 有人能帮我看看我错在哪里吗 import java

随机推荐