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 注解 这样会接收不到 

posted @   占卜的松鼠  阅读(376)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示