openfeign 复杂对象之文件属性传输调用
上次是openfeign传输文件参数,可以直接通过文件传输及在注解上添加类型为表单来实现
这几天又有一个新的需求,是要把文件放在一个对象中作为一个属性然后openfeign之间传输调用
大体意思就是一个复杂的文件对象例:
@Data
@ApiModel(description = "自定义图片请求")
public class UploadCardDto {
@ApiModelProperty(value = "文件",required = true)
private MultipartFile file;
@ApiModelProperty(value = "文件类型", required = true)
private Long type;
}
这只是一个简单的例子,实际上的对象更加复杂不过没有其他复杂对象如子对象或是Map,List等
一番百度,谷歌后也是找到许多帖子有复杂的有简单的,但都没实现,最后也是复杂结合简单一步步融合来实现的,
一,首先你要在feign服务加上feign的另外依赖,这是github上解决feign文件传输的相关依赖
<!--feign支持文件上传-->
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>${feign-form-version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>${feign-form-version}</version>
</dependency>
二,编写服务端代码 声明是from表单类型json上传 注意:不要使用注解来修饰参数,接收端也不加 注意传输的实体不要实现序列化接口,因为文件流无法序列化而报错,或者需要编写序列化器
@RequestMapping(value = "/card-style/uploadCardStyle",method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
CommonResult uploadCardStyle(UploadCardDto uploadCardDto);
三, 没有三,这是没有太复杂的对象,仅仅是将文件作为属性来传输,百度发现好多让写自定义表单编码器的,确实可以,但是同feign下的不使用文件传输的就不能传输了,后来删除发现没有问题那就更好了直接解决了
但是可能会遇到不知道怎么接受前段这个复杂对象这里放个连接https://blog.csdn.net/LitongZero/article/details/102583161再举个例子
public class UserFileReq {
// 参数
private String username;
// 文件
private MultipartFile file;
// 省略get\set
}
@PostMapping(value = "/upload")
@ResponseBody
public String handleFileUpload(UserFileReq req) {
// 文件和参数 都在实体中了
}
不要使用@Requestbody 注解 这样会接收不到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通