当前位置: 首页 > news >正文

feign技巧 - form方式传值

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.lryc.cn/news/5810.html

相关文章:

  • MATLAB | 情人节来绘制更立体的玫瑰花吧
  • 【Python表白代码】 2.14“Valentine‘s Day”“没别的意思 就是借着特殊日子说声喜欢你”你在哪儿?我去见你~(各种玫瑰源码合集)
  • 压力应变电桥信号隔离放大变送器差分输入0-±10mV/0-±20mV转0-20mA/0-10v
  • Linux系统之部署个人导航页
  • 四、Windows 平台安装 MongoDB
  • 浅谈应用安全测试工具
  • 四类(七种)排序算法总结
  • [oeasy]python0083_十进制数如何存入计算机_八卦纪事_BCD编码_Binary_Coded_Decimal
  • 理解框架的编译时与运行时
  • 推挽电路---采用二极管消除交越失真----克服交越失真的互补推挽输出电路图
  • day11_面向对象
  • 大数据处理学习笔记1.1 搭建Scala开发环境
  • VSCODE C++ 调用matplotlibcpp画图
  • 面对“开门红”,跨境支付如何寻求新增长曲线?
  • MySQL入门篇-MySQL MHA高可用实战
  • C语言文件操作
  • Flink中核心重点总结
  • gismo中NURBS的相关函数的使用---待完善
  • 5.数据共享与持久化
  • RabbitMQ-客户端源码之AMQCommand
  • linux设置登录失败处理功能(密码错误次数限制、pam_tally2.so模块)和操作超时退出功能(/etc/profile)
  • Centos7上Docker安装
  • 新瑞鹏“狂飙”,宠物医疗是门好生意吗?
  • Spring循环依赖问题,Spring是如何解决循环依赖的?
  • 更改SAP GUI登录界面信息
  • 分布式微服务架构下网络通信的底层实现原理
  • 进大厂必备的Java面试八股文大全(2023最新精简易懂版,八股文中的八股文)
  • 都说测试行业饱和了,为什么我们公司给初级测试开到了12K?
  • 解决Idea启动项目失败,提示Error running ‘XXXApplication‘: Command line is too long
  • GB/T28181-2022针对H.265、AAC的说明和技术实现