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

news2024/9/20 17:00:01

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信息的,再总结。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现场直击!触想智能亮相德国2023 SPS展会

当地时间11月14日上午9时 2023 年(德国)纽伦堡国际工业自动化及元器件展览会 SPS 展(以下简称&#xff1a;SPS展会)正式拉开帷幕&#xff0c;触想智能与来自全球各地的领先科技公司及前沿业者齐聚盛会&#xff0c;共赴一场科技与创新交汇的“饕餮盛宴”。 △ 2023 SPS展会开幕(…

sCrypt Playground 发布

sCrypt Playground 发布了。 与桌面IDE 完全相同的功能&#xff0c;但是无需安装。体验地址: https://playground.scrypt.io。 请不要在 sCrypt Playground 上存储重要数据。我们会不定时清除用户保存在其上的数据。

海外邮件接收延迟、接收不到怎么办?U-Mail邮件网关来了

随着经济全球化的发展&#xff0c;很多国内企业开始踏足海外市场&#xff0c;电子邮件就成为了国内企业与海外客户沟通交流的主要渠道。然而海外邮件接收延迟、接收不到等问题成为了困扰企业与海外客户沟通的一大阻碍&#xff0c;导致客户邮件回复不及时&#xff0c;询盘邮件接…

Javaweb之Vue的概述

2.1 Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了&#xff0c;但是开发的效率还有待提高&#xff0c;那么如何提高呢&#xff1f;我们先来分析下页面的组成。一个完整的html页面包括了视图和数据&#xff0c;数据是通过请求 从后台获取的&#xff0c;那么意味着我…

移植freertos到qemu上运行

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

教你轻轻松松写出10万+的微头条爆文,赶紧收藏!

微头条是投放在今日头条上的稿件&#xff0c;重点在于微字&#xff0c;一般在300-500字之间&#xff0c;讲究的是原创干货&#xff0c;有独到见解。 企业和品牌撰写微头条来给自己带来更多曝光和展现。想要让你的微头条写出爆款内容&#xff0c;这是需要讲究技巧的&#xff0c…

PyTorch:张量与矩阵

PyTorch 是一个基于 Python 的科学计算包&#xff0c;专门针对深度学习研究&#xff0c;提供了丰富的工具和库。在 PyTorch 中&#xff0c;张量&#xff08;tensor&#xff09;是深度学习的核心数据结构&#xff0c;它可以看作是可以进行自动微分的多维数组。张量不仅可以代表标…

less详解

拥抱前端开发的未来&#xff0c;掌握Less的魔力&#xff01;在我们精心撰写的博客文章中&#xff0c;你将发现如何通过学习Less这一强大的CSS预处理器&#xff0c;以更高效、更可维护的方式编写样式代码。无论你是初学者还是经验丰富的开发者&#xff0c;我们的指南将带你逐步了…

猫罐头哪种好吃又健康?精选5款营养美味的猫罐头推荐!

不知不觉开宠物店已经7年啦&#xff0c;店里的猫猫大大小小也算是尝试过很多品牌的猫罐头了。一开始选购猫罐头我也是踩了很多坑&#xff0c;各种踩雷。猫罐头的各种门道还是很难摸索的&#xff0c;新手养猫一不小心就会着道了。 作为一个从业宠物行业7年的人&#xff0c;我将给…

vue3 tsx 项目中使用 Antv/G2 实现多线折线图

Antv/G2 文档 Antv/G2 双折线图 安装依赖 项目中安装 antv/g2 依赖库&#xff1a; npm install antv/g2 --save安装成功&#xff1a; 项目使用 新建文件 IndicatorTrend.tsx&#xff1a; import { defineComponent, PropType, onMounted, ref } from vue import { useCh…

环境检测lims系统 环境检测行业实验室管理系统

白码环境监测实验室管理系统针对实验室管理中遇到的问题和难点&#xff0c;提供对环境监测实验室所有监测业务的全流程管理&#xff0c;实现对实验室“人、机、料、法、环”(即人员、仪器、样品、方法、环境)的全面资源管理&#xff0c;实现环境监测实验室工作的自动化和规范化…

二十、泛型(8)

本章概要 潜在的类型机制 pyhton 中的潜在类型C 中的潜在类型Go 中的潜在类型java 中的直接潜在类型 潜在类型机制 在本章的开头介绍过这样的思想&#xff0c;即要编写能够尽可能广泛地应用的代码。为了实现这一点&#xff0c;我们需要各种途径来放松对我们的代码将要作用的…

macos死机后IDEA打不开,Cannot connect to already running IDE instance.

Cannot connect to already running IDE instance. Exception: Process 573 is still running 解决办法 进入&#xff1a;/Users/lzq/Library/Application Support/JetBrains 找到IDEA的目录删除隐藏文件夹 .lock rm -rf .lock

SLAM中提到的相机位姿到底指什么?

不小心又绕进去了&#xff0c;所以掰一下。 以我个人最直观的理解&#xff0c;假设无旋转&#xff0c;相机在世界坐标系的(5,0,0)^T的位置上&#xff0c;所谓“位姿”&#xff0c;应该反映相机的位置&#xff0c;所以相机位姿应该如下&#xff1a; Eigen::Matrix4d T Eigen::M…

Django之模版层

文章目录 模版语法传值模版语法传值特性模版语法标签语法格式if模板标签for模板标签with起别名 模版语法过滤器常用过滤器 自定义过滤器、标签、inclusion_tag自定义过滤器自定义标签自定义inclusion_tag 模版导入模版继承 模版语法传值 模板层三种语法{{}}:主要与数据值相关{%…

【LeetCode刷题-滑动窗口】--1456.定长子串中元音的最大数目

1456.定长子串中元音的最大数目 方法&#xff1a;使用滑动窗口 class Solution {public int maxVowels(String s, int k) {int n s.length();int sum 0;for(int i 0;i<k;i){sum isVowel(s.charAt(i));}int ans sum;for(int i k;i<n;i){sum sum isVowel(s.charAt…

【echarts】实现单线与多线滚轮联动、隐藏拖拽、关闭动画

单线滚轮联动 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>ECharts DataZoom</title><script src"https://cdn.jsdelivr.net/npm/echarts5.2.0/dist/echarts.min.js"></script> </hea…

京东数据挖掘(京东数据采集):2023年Q3电脑行业数据分析报告

近年来&#xff0c;在远程办公、远程教育等需求的刺激下&#xff0c;电脑的销售增长较为显著。不过&#xff0c;随着市场的成熟乃至饱和&#xff0c;电脑销售市场也逐渐出现增长困难、需求疲软等问题。 2023年第三季度&#xff0c;电脑市场的出货量同比下滑。根据鲸参谋电商数据…

【ROS导航Navigation】四 | SLAM与导航 | 自主移动的地图构建 (更新ing)

致谢&#xff1a;ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 实现比较简单&#xff0c;步骤如下: 编写launch文件&#xff0c;集成SLAM与move_base相关节点&#xff1b;执行launch文件并测试。 <la…