feign 支持多 @RequestPart 同时发送 MultipartFile 和复杂对象

环境介绍

客户端环境

依赖包版本
gradle6.7.1
springboot2.3.0.RELEASE
springCloudHoxton.SR6

服务端环境

依赖包版本
gradle5.4.1
springboot2.3.0.RELEASE
springCloudHoxton.SR6

代码

客户端

feign代码
@FeignClient(name = "xx", primary = false, configuration = CreateFeignClient.MultipartSupportConfig.class)
public interface CreateFeignClient {

    @Configuration
    class MultipartSupportConfig {
        @Bean
        public AbstractFormWriter jsonFormWriter() {
            return new JsonFormWriter();
        }
    }

    @PostMapping(value = "/xx", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    ResultVo create(@RequestPart("file") MultipartFile file, @RequestPart("createVo") CreateVo createVo);
    
}
构建MultipartFile对象
public MultipartFile initFile(String path){
        File file = new File(path);
        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            return new MockMultipartFile("file", file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
        } catch (IOException e) {
            log.error("文件转换失败->", e);
            throw new IllegalArgumentException("文件转换失败");
        }
    }

注意:

构建MultipartFile对象中new MockMultipartFile(“file”, file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);要与feign接口ResultVo create(@RequestPart(“file”) MultipartFile file, @RequestPart(“createVo”) CreateVo createVo);中标红地方相同,否则服务端会报错 Required MultipartFile parameter ‘file’ is not present

服务端

Controller代码
@PostMapping(value = "/xx")
public ResultVo create(@RequestPart("file") MultipartFile file, @RequestPart("createVo") CreateVo createVo){
	ResultVo vo = new ResultVo();
	vo.setOriginalFilename(file.getOriginalFilename());
	vo.setUserNames(contractVo.getUsers().stream().map(s -> s.getUserName()).collect(Collectors.toList()));
	return vo;
}

🤵‍♂️ 个人博客: www.tingyinhu.com
🎨 微信公众号:java编程秀

✏️记录基础知识,做大家的备忘录。
🚀分享前沿技术,做大家的加油站。

📝 如果文章对你有帮助的话,欢迎 「分享⏩在看👀点赞👍收藏📂」,不胜感激!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚洛瞬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值