记feign调用第三方接口时header是multipart/form-data

1.请求第三方接口,用feign请求

请求第三方接口,用feign请求,header不通,feign的写法不同

调用时报错Could not write request: no suitable HttpMessageConverter found for request type [com.ccreate.cnpc.mall.dto.zm.ZMPageQueryDTO] and content type [multipart/form-data;charset=UTF-8]

1. 对方接口是multipart/form-data接收格式

package com.mall.controller.feign;

import com.mall.controller.feign.fallback.ZMGoodFeignFallback;
import com.mall.dto.zm.ZMPageQueryDTO;
import com.mall.dto.zm.ZMSpuInfoDTO;
import com.ccreate.common.response.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 商品
 */
@FeignClient(url = "${zm.host}", name = "cnpc-ZMGood", fallbackFactory = ZMGoodFeignFallback.class)
public interface ZMGoodFeign {

    /**
     * 商品列表查询
     *
     */
    @PostMapping(value = "/api/agent/goodsList", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    R<ZMSpuInfoDTO> getSpuList(@RequestBody ZMPageQueryDTO page);

}

对方返回的格式

  {
    code:200,
    message:"ok",
    data:{
        list:[
            {
                id:"10001661",
                name:"migo保温壶家用保温水壶大容量热水瓶304不锈钢热水壶保温瓶暖",
                sellingPoint:"304不锈钢 坚韧把手 24小时长效保温",
                skuType:"2",
                brandId:"100094",
                brandName:"miGo",
                categoryId:"100278",
                categoryIds:"100235,100273,100278",
                coverImage:"http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717090891958.jpg",
                marketPrice:"189.00",
                photos:[
                    "http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717090891958.jpg",
                    "http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717091363771.jpg",
                ],
                detailImages:[
                    "http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717110984525.jpg",
                    "http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717111337957.jpg",
                ],
                detailContent:"",
                deliverTime:"TIME24",
                servicePromise:[
                    "FREE_DELIVERY",
                    "PROMISE10"
                ],
                afterSaleRule:"",
                auditStatus : "1",
                agentRejectReason : "",
                skuList:[
                    {
                        "skuId":"80005071",
                        "code":"S20003VH.02",
                        "marketPrice":"199.00",
                        "agentPrice":"200.00"
                        "weight":"0.90",
                        "specList":[
                            {
                                "name":"容量",
                                "value":"2L",
                                "image":"http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717160413832.jpg"
                            },
                            {
                                "name":"颜色",
                                "value":"馥芮白",
                                "image":""
                            }
                        ],
                    },
                    {
                        "skuId":"80005072",
                        "code":"S20003VH.01",
                        "marketPrice":"199.00",
                        "agentPrice":"200.00"
                        "weight":"0.90",
                        "specList":[
                            {
                                "name":"容量",
                                "value":"2L",
                                "image":"http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717161011241.jpg"
                            },
                            {
                                "name":"颜色",
                                "value":"新草绿",
                                "image":""
                            }
                        ],
                    },
                    {
                        "skuId":"80005073",
                        "code":"S1506VH.02",
                        "marketPrice":"189.00",
                        "weight":"0.80",
                        "agentPrice":"200.00"
                        "specList":[
                            {
                                "name":"容量",
                                "value":"1.5L",
                                "image":"http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717162165903.jpg"
                            },
                            {
                                "name":"颜色",
                                "value":"馥芮白",
                                "image":""
                            }
                        ],
                    },
                    {
                        "skuId":"80005074",
                        "code":"S1506VH.01",

                        "weight":"0.80",
                        "marketPrice":"189.00",
                        "agentPrice":"200.00"
                        "specList":[
                            {
                                "name":"容量",
                                "value":"1.5L",
                                "image":"http://zmzx-b2b.oss-cn-hangzhou.aliyuncs.com/goods/2020052717162532347.jpg"
                            },
                            {
                                "name":"颜色",
                                "value":"新草绿",
                                "image":""
                            }
                        ],
                    }
                ],
                status:"1",
                agentStatus:"1",
                agentRejectReason:""
            },
        ],
        "total":1
    }
}

我们接收R对象

public class R<T> implements Serializable {
    private static final int SUCCESS = 200;
    private static final String SUCCESS_MESSAGE = "success";
    private static final long serialVersionUID = 1L;
    private int code = 200;
    private String message = "success";
    private T data;
}

2. 对方接收格式是x-www-form-urlencoded

我们对应的feign请求是

package com.mall.controller.feign;

import com.mall.controller.feign.fallback.ThirdPriceFeignFallback;
import com.mall.dto.GoodSkuThirdPriceAddDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 三方商品价格
 */
@FeignClient(url = "${li.host}", name = "cnpc-price", fallbackFactory = ThirdPriceFeignFallback.class)
public interface ThirdPriceFeign {

//    @PostMapping(value = "/price", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @PostMapping(value = "/price",headers = {"content-type=application/x-www-form-urlencoded"})
    GoodSkuThirdPriceAddDTO getThirdPrice(@RequestBody MultiValueMap<String, Object> request);

}

这里参数必须是MultiValueMap,否则转换参数的时候就会报错

3. 断点调试

所有的参数封装都会走到org.springframework.cloud.openfeign.support.SpringEncoder#encode这个方法

如上图所示,最终会由 

public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConverter 这个类解析参数

最终组装好header和body参数,再去请求

4. 以后还有请求对方接口header带token或其他header信息的,再总结。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/149662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序员的护城河:技术深度、创新精神与软实力的完美结合

文章目录 1. 技术深度&#xff1a;建立坚实的技术基石2. 创新精神&#xff1a;应对变革的利器3. 软实力&#xff1a;沟通协作构筑团队防线4. 结合三者构筑完美护城河 &#x1f389;程序员的护城河&#xff1a;技术深度、创新精神与软实力的完美结合 ☆* o(≧▽≦)o *☆嗨~我是I…

【Maven】进阶

文章目录 1. 聚合2. 继承3. 属性变量定义与使用4. 版本管理5. 资源配置6. 多环境配置7. 跳过测试&#xff08;了解&#xff09; 1. 聚合 为了防止某个模块&#xff08;dao&#xff09;更新了&#xff0c;重新编译了&#xff0c;导致和其他模块不兼容&#xff0c;需要用一个roo…

移植freertos到qemu上运行

1、freertos源码下载 参考博客&#xff1a;《freertos源码下载和目录结构分析》&#xff1b; 2、编译freertos 2.1、选择合适的Demo freertos官方已经适配过qemu&#xff0c;所以我们并不需要做源码级别的移植&#xff0c;只需要选择合适的Demo文件夹。 2.2、修改Makefile 2.3…

sCrypt 发布零知识证明精选列表

sCrypt 发布了与零知识证明相关的精选列表&#xff0c;包括&#xff1a;教程&#xff0c;编程语言&#xff0c;工具&#xff0c;书籍&#xff0c;社区&#xff0c;证明系统。欢迎收藏 github 代码仓&#xff1a;https://github.com/sCrypt-Inc/awesome-zero-knowledge-proofs。…

spark与scala的对应版本查看

仓库地址 https://mvnrepository.com/artifact/org.apache.spark/spark-core 总结 spark3.0 以后&#xff0c;不再支持 scala2.11spark3.0 以后&#xff0c;只能用 scala2.12以上

Zabbix邮箱告警

1.在邮箱中获取授权码 2.zabbix配置 agengt配置 添加以下配置 [rootserver03 ~]# visudo zabbix ALL(ALL) NOPASSWD: ALL [rootserver03 ~]# vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands1 #允许接收远程命令 修改原有的值&#xff0c;不要在末…

Windows系统CMake+VS编译protobuf

目录 一些名词CMake构建VS工程下载protobuf源码下载CMake编译QT中使用 方案二失败&#xff1a;CMakeQT自带的Mingw编译参考链接 一些名词 lib dll lib库实际上分为两种&#xff0c;一种是静态链接lib库或者叫做静态lib库&#xff0c;另一种叫做动态链接库dll库的lib导入库或称…

.Net8 Blazor 尝鲜

全栈 Web UI 随着 .NET 8 的发布&#xff0c;Blazor 已成为全堆栈 Web UI 框架&#xff0c;可用于开发在组件或页面级别呈现内容的应用&#xff0c;其中包含&#xff1a; 用于生成静态 HTML 的静态服务器呈现。使用 Blazor Server 托管模型的交互式服务器呈现。使用 Blazor W…

LINMP搭建wordpress-数据库不分离

目录 一、nginx部署 1.安装nginx前的系统依赖环境检查 2.下载nginx源代码包 3.解压缩源码包 4.创建普通的nginx用户 5.开始编译安装nginx服务 6.创建一个软连接以供集中管理 7.配置nginx环境变量 二、mysql 1.创建普通mysql用户 2.下载mysql二进制代码包 3.创建mys…

吴恩达《机器学习》8-5->8-6:特征与直观理解I、样本与值观理解II

8.5、特征与直观理解I 一、神经网络的学习特性 神经网络通过学习可以得出自身的一系列特征。相对于普通的逻辑回归&#xff0c;在使用原始特征 x1​,x2​,...,xn​ 时受到一定的限制。虽然可以使用一些二项式项来组合这些特征&#xff0c;但仍然受到原始特征的限制。在神经网…

【MySQL】MVCC(多版本并发控制)详解

MVCC MVCC概述 MVCC&#xff0c;全称 Multi-Version Concurrency Control &#xff0c;即多版本并发控制。MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问&#xff0c;在编程语言中实现事务内存。 MVCC就是在ReadCommitte…

echarts实现不展示X轴Y轴轴线、刻度

今日工作中需要实现折线图的简图&#xff0c;就是只看个大概趋势不展示具体坐标&#xff0c;查阅了文档记录一下。 initCharts(_id, _name, yAxisData, _unit){if(this[_id]) this[_id].clear();this[_id] $echarts.init(document.getElementById(_id));const options {grid…

基于Springboot+Vue的社区医院管理系统

基于SpringbootVue的社区医院管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 医生列表 医生详情 登录界面 管理员界面 医生界面 摘要 社区医院管…

van-dialog弹窗异步关闭-校验表单

van-dialog弹窗异步关闭 有时候我们需要通过弹窗去处理表单数据&#xff0c;在原生微信小程序配合vant组件中有多种方式实现&#xff0c;其中UI美观度最高的就是通过van-dialog嵌套表单实现。 通常表单涉及到是否必填&#xff0c;在van-dialog的确认事件中直接return是无法阻止…

POE也收费了

一直通过POE在用chatgpt&#xff0c;今天下午发现要收费了…

二百零三、Flume——Flume实时采集数据频率为1s的高频率Kafka数据直接写入ODS层表的HDFS文件路径下

一、目的 在离线数仓中&#xff0c;需要用Flume去采集Kafka中的数据&#xff0c;然后写入HDFS中。 由于每种数据类型的频率、数据大小、数据规模不同&#xff0c;因此每种数据的采集需要不同的Flume配置文件。玩了几天Flume&#xff0c;感觉Flume的使用难点就是配置文件 二、…

【MATLAB源码-第78期】基于matlab的可见光通信不同调制方式(OOK,PPM,DPPM,DHPIM)误码率,信道容量分析。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 可见光通信&#xff08;VLC&#xff0c;Visible Light Communication&#xff09;是一种利用可见光作为信号载体的通信技术。在VLC中&#xff0c;常用的调制方式包括OOK&#xff08;On-Off Keying&#xff09;、PPM&#xff…

【C++初阶】三、类和对象(面向过程、class类、类的访问限定符和封装、类的实例化、类对象模型、this指针)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【C初阶】二、入门知识讲解 &#xff08;引用、内联函数、auto关键字、基于范围的for循环、指针空值nullptr&#xff09;-CSDN博客 一 . 面向过程和面向对象初步认识 C语言 -- 面向…

【力扣题:循环队列】

文章目录 一.题目描述二. 思路解析三. 代码实现 一.题目描述 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好…

Oracle-动态sql学习笔记,由易至难讲解七个例子

本文章的内容来源于对oracle课堂上讲的内容做出的笔记 静态sql和动态sql 静态sql&#xff1a; 静态 SQL 是在编译时写死的 SQL 语句&#xff0c;即在程序编写阶段&#xff0c;SQL 语句已经被固定下来。 特点&#xff1a; 1.预编译&#xff1a; SQL 语句在程序编译时就会被…