feign技巧 - form方式传值

news2024/11/25 12:26:30

feign技巧 - form方式传值。

0. 文章目录

      • 1. 前言
      • 2. 调用样例
      • 3. 原理解析
        • 3.1 feign端序列化参数
        • 3.2 SpringMVC服务端解析参数
        • 3.3 补充 - 继承关系不会被传递的原因
        • 3.4 补充 - 不能使用GET。
      • 4. 总结

1. 前言

直接正题。 如何使用feign进行fom表单方式的请求调用,以及其中的注意事项。

2. 调用样例


    // =============================================== feign调用端
    //	注意事项:
    //		1. 两个参数都要使用@RequestPart注解进行标注.
    //		2. consumes属性配置为必选.
    //		3. 代表参数载体对象的params字段, 不能存在继承关系, 所有字段都必须直接定义在KDeployParams中. 如果存在基类, 那么处理流程中,只有在`KDeployParams`中直接定义的字段才能被正确解析并传递给服务端,基类的字段不会被feign解析传递. 
	@PostMapping(value = "/projectB/postWithFormData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
	String postWithFormData(@RequestPart("file") MultipartFile file, @RequestPart KDeployParams params);
    
    // =============================================== 对应的服务端 
    //	注意事项:
    //		1. 第二个参数params前面没有任何注解, 或者使用@ModelAttribute。千万不要使用@RequestPart.
	@PostMapping("/projectB/postWithFormData")
	public String postWithFormData(@RequestPart(required = false, name = "file") MultipartFile file,
			KDeployParams params) throws InterruptedException, IOException { ... }    
    

3. 原理解析

分为两部分 —— 发送端的feign,以及服务端的SpringMVC。

3.1 feign端序列化参数

整条请求链路中,feign端的调用层级最终会来到位于feign-form-xx.jar中的MultipartFormContentProcessor.process (...)
在这里插入图片描述

3.2 SpringMVC服务端解析参数

针对上文例子中,在服务端接收层面,SpringMVC中负责传递过来的参数还原/反序列化为KDeployParams的是ServletModelAttributeMethodProcessor(该类实现了大名鼎鼎的HandlerMethodArgumentResolver)。

3.3 补充 - 继承关系不会被传递的原因

PojoUtil的坑,下面这里只会检索出当前类直接声明的字段
在这里插入图片描述

3.4 补充 - 不能使用GET。

否则报如下错误:
在这里插入图片描述

4. 总结

神在细节之中。

细节是魔鬼。

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

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

相关文章

leaflet 上传KMZ文件,并在map上显示(062)

第062个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中本地上传包kmz文件,解析并在地图上显示图形。在制作本示例的过程中,还有点缺憾,就是kmz中的图片文件没有在jszip中处理好,只能先解压缩后,将图片文件放到public/文件加下,暂时留一个遗憾点,以后再做…

又发现一个ChatGPT体验站,辅助写代码真方便

♥️ 作者:Hann Yang ♥️ 主页:CSDN主页 ♥️ 2022博客之星Top58,原力榜Top10/作者周榜Top13 ♥️ “抢走你工作的不会是 AI ,而是先掌握 AI 能力的人” ChatGPT 美国OpenAI研发的聊天机器人程序,于2022年11月30日发…

【刷题笔记】--两数之和Ⅳ,从二叉树中找出两数之和

法一:深度搜索中序遍历双指针 思路:通过中序遍历二叉树得到一个递增的数列,再在这个递增的二叉树中找到这两数。 主要学到双指针这个方法。 对于一般数列,我们要找到两数满足其之和等于目标数,我们一般会进行暴力&a…

C++请求SpringBoot的接口问题记录

问题描述最近忙一个小东西,遇到一个很有意思的问题,记录一下。 需求非常简单,就是java侧提供一个接口给C侧调用。 接口按照业务规范提供出来了,在postman中请求一下,出入参都正常。 关于这个接口请求方式为postJson方式…

C++:提高篇: 栈-寄存器和函数状态:栈指针帧指针详解

栈指针和帧指针前言1、EBP和ESP详解2、push ,leave ,call汇编指令分析3、下面用一个图总结前言 🚗🚗🚗:在刚接触 ESP和EBP概念时,我一直认为:ESP指向栈顶指针,EBP指向栈…

为什么说百度下个月推出文心一言会被ChatGPT完全碾压

作者,姚远: Oracle ACE(Oracle和MySQL数据库方向)华为云MVP 《MySQL 8.0运维与优化》的作者中国唯一一位Oracle高可用大师拥有包括 Oracle 10g和12c OCM在内的20数据库相关认证。曾任IBM公司数据库部门经理现在一家第三方公司任首…

操作系统——2.操作系统的特征

这篇文章,我们来讲一讲操作系统的特征 目录 1.概述 2.并发 2.1并发概念 2.1.1操作系统的并发性 3.共享 3.1共享的概念 3.2共享的方式 4.并发和共享的关系 5.虚拟 5.1虚拟的概念 5.2虚拟小结 6.异步 6.1异步概念 7.小结 1.概述 上一篇文章,我们…

实时数据仓库

1 为什么选择kafka? ① 实时写入,实时读取 ② 消息队列适合,其他数据库受不了 2 ods层 1)存储原始数据 埋点的行为数据 (topic :ods_base_log) 业务数据 (topic :ods_base_db) 2)业务数据的有序性&#x…

论文阅读 - Early Detection of Fake News by Utilizing the Credibility of News

论文链接:https://arxiv.org/pdf/2012.04233.pdf 目录 摘要 1 简介 2 相关工作 2.1 基于特征的方法 2.2 深度学习方法 3 问题表述 4 拟议的框架 4.2 用户可信度预测 4.3 虚假新闻分类 4.3.1 新闻内容表示 4.3.2 融合注意力单元 5 实验 5.1 数…

工厂模式--设计模式

分类: 1、简单工厂:可根据自变量的不同返回不同类的实例 应用:将类名和类的全路径放入到配置文件,通过文件流将内容读取放入到map集合中保存,通过反射读取类全路径读取到该类,然后调用类方法。 详细设计&…

山东大学2022算法期末

接力:山东大学2021算法期末 2022 SDU算法导论期末考试 2020 计科 计算题 三道 35’ (1) 画BFS树 (2) 做DFS说明各种边的分类使用floyd或者矩阵乘法求全源最短路,求最短路矩阵以及前驱矩阵(3个点,比较友好,应该没有…

idea推送镜像到desktop报错:Cannot run program “docker-credential-desktop“ 系统找不到指定的文件。

windows Docker 搭建仓库 打开docker desktop 。 打开windows cmd窗口或powershell窗口。 输入"docker run -d -p 5000:5000 --name test registry:2 "运行一个名字叫test的registry容器。 idea配置springboot项目的docker插件 在pom.xml中的plugins中加入下面代码…

Kaldi语音识别技术(五) ----- 特征提取

Kaldi语音识别技术(五) ----- 特征提取 文章目录Kaldi语音识别技术(五) ----- 特征提取一、识别流程二、MFCC特征提取概述三、文件格式文件格式说明提取部分数据修复提取数据提取剩余部分数据四、特征提取特征提取—C特征提取—并行提取特征提取—特征查看五、CMVNCMVN—脚本CM…

SpringMVC执行流程(面试题)

SpringMVC是Spring框架中的组成成员之一,是一个针对于Web开发的一个类似于Servlet技术的一个web应用框架,它包含了MVC架构的特点,让Web变得更加简单。在SpringMVC框架中,一个比较核心的组件就是他的前端控制器,这个前端…

sql复习(子查询、创建和管理表)

一、子查询 子查询 (内查询) 在主查询之前一次执行完成 子查询的结果被主查询(外查询)使用 1.单行子查询 只返回一行,使用单行比较操作符。 --谁的工资比Able高? select last_name,salary from employees where salary > (select salaryfrom empl…

idea插件生成dao类service类controller类以及mapper.xml

idea插件生成dao类service类controller类以及mapper.xml 安装插件Easycode和MybatisX,不用自己写代码 1.Files——》Settings——》Plugins,分别搜索Easycode和MybatisX,点击下载。 2.新建一个springboot模板,选择的依赖如下 3.…

初探Spring采用Spring配置文件管理Bean

文章目录Spring容器演示--采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇敢骑士…

JAVA内存模型(JMM)

JMM一、JMM——原子性-(synchronized)二、JMM——可见性-问题2.1 退不出的循环2.2 可见性——解决2.3 可见性三、JMM——有序性-问题3.1 诡异的结果3.2 解决方法3.3 有序性理解3.4 happens-beforeJMM 即 Java Memory Model,简单地说,JMM定义了一套在多线…

JVM - 字节码执行引擎

目录 栈帧和局部变量表 概述 栈帧概述 栈帧概念结构 局部变量表 slot是复用的实例 操作数栈 概述 动态连接 方法调用 静态分派和动态分派 栈帧和局部变量表 概述 JVM的字节码执行引擎,功能基本就是输入字节码文件,然后对字节码进行解析并处理…

jdk19下载与安装教程(win10)超详细

一、下载安装步骤 1、官网下载还需要注册,可以点【我的网盘】目录下载,目录也有其它低版本的,如果有需要大家根据需要自行选择。 2、下载后直接点击安装程序,点击【运行】。这里我使用的是64位的。 3、点击【下一步】。 4、默认安…