FeignClient带文件多对象传参

生产者:

  @ApiOperation(value = "切块上传", notes = "切块上传")
    @PostMapping("/uploadChunk")
    public Result uploadChunk( HttpServletRequest request,ChunkBO chunkBO,MergeFileBO mergeFileBO
    ) throws Exception {
        LOGGER.info("==========chunk " + chunkBO.getChunk());
        //1、校验参数,校验文件格式是否合法,创建空文件
        Chunk chunk = BeanUtil.convertBean(chunkBO, Chunk.class);
        chunk.setUserId("admin");
        chunk.setUserName("admin");
        chunk.setUuid(mergeFileBO.getUuid());
        chunk.setFileId(mergeFileBO.getFileId());
        chunk.setName(mergeFileBO.getFileName());
        chunk.setSize(mergeFileBO.getTotalSize());
        chunk.setCurrentSize(chunkBO.getSize());
        chunk.setFileMD5(mergeFileBO.getFileMD5());
        Part part = request.getPart("file");
        InputStream inputStream = part.getInputStream();
        chunk.setInputStream(inputStream);
        chunk.setFileType(part.getContentType());
        System.out.println("========uuid="+chunk.getUuid());
        ‘’‘’
        }

生产者这边的接口是参数分别是HttpServletRequest ,ChunkBO ,MergeFileBO 这三个参数,从 Part part = request.getPart("file")看出文件已经封装到了HttpServletRequest 请求对象中。

消费者:

消费者这边按照平时的restful风格来调用的话就会:

@FeignClient(name = "filesys-service-provider1",  url = "${image.show.host}", path = "/filesys-perpc")
public interface SeaWeedsImageUploadClient {

    @PostMapping(value = "/uploadChunk", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    Result<Long> uploadChunk(@RequestPart("file")  MultipartFile file,ChunkBO chunkBO,MergeFileBO mergeFileBO);
}

这样来调用,但是这样调用Feign会报java.lang.IllegalStateException: Method has too many Body parameters这样的错误,由于是多个对象所以也不能使用@RequestBody注解,而且生产者那边也没有使用RequestBody来接收参数,所以肯定不能用@RequestBody注解。
解决方案:

@FeignClient(name = "filesys-service-provider1",  url = "${image.show.host}", path = "/filesys-perpc")
public interface SeaWeedsImageUploadClient {

    @PostMapping(value = "/uploadChunk", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    Result<Long> uploadChunk(@RequestPart("file")  MultipartFile file,@SpringQueryMap ChunkBO chunkBO,@SpringQueryMap MergeFileBO mergeFileBO);
}

@SpringQueryMap:可以封装在对象里面的参数,自动解析成类似于@RequestParam的方式,将参数跟在url后面;

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值