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

记录一下在原有的接口中增加文件上传☞@RequestPart

首先,咱声明一下:

@RequestBody和 MultipartFile 不可以 同时使用!!!

因为这两者预期的请求内容类型不同。@RequestBody 预期请求的 Content-Type 是 application/json 或 application/xml,而 MultipartFile 预期的是 multipart/form-data

现在的场景是这样的:

        1. 一种是既有其他字段,又有文件上传;

        2. 另一种是需求原来没有文件上传,我们用 @RequestBody 接收入参,后来需求改了,在原有的表单中增加了上传文件。这种情况下怎么弄呢?

解决方法:

       第一种,直接用 @RequestParam 逐个接收对应的字段:

@PostMapping("/add")
    public ResponseVO add( @RequestParam(required = false) Integer idBiz,
                          @RequestParam Integer idConnLink,
                          @RequestParam String idPlatform,
                          @RequestParam Date approveTime,
                          @RequestParam String approveNo,
                          @RequestParam(required = false) MultipartFile approveMaterial,
                          @RequestParam Date registerTime,
                          @RequestParam(required = false) MultipartFile  topologyMap,
                            @RequestParam(required = false)    Long deviceId
    ) throws IOException {
    ......
}

第二种,@RequestPart可以同时处理普通参数和Multipart文件,允许在一个方法中处理多种类型的参数。所以用它来接收JSON和FILE 简直是再合适不过了。

 /**
     * 新增/更新
     * @param bo
     * @return
     * @throws BaseException
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseVO update(@RequestPart("bo") BusinessBaseInfoBO bo, @RequestPart(value = "file", required = false) MultipartFile file) throws BaseException, SQLException, IOException {
        
        if(file != null){
            String approveMaterialLast =file.getOriginalFilename();
            file.transferTo(new File(url+"/001/"+approveMaterialLast));
            bo.setApproveMaterials(file.getOriginalFilename());
        }
        
        ......

        return new ResponseVO<>().success();
    }

在Apifox中自测的时候,需要注意Content-Type的选择:

当然除了上面常用的,还可以用Map接收再对应封装之类的其他方法。


http://www.kler.cn/a/400737.html

相关文章:

  • 网络爬虫 Python 第二课
  • django-ninja 实现cors跨域请求
  • LeetCode 2816.翻倍以链表形式表示的数字
  • JavaWeb——JS、Vue
  • 2024年11月16日 星期六 重新整理Go技术
  • 机器学习(1)
  • java基础面试题笔记(基础篇)
  • 基于YOLOv8深度学习的医学影像甲状腺结节病症检测诊断研究与实现(PyQt5界面+数据集+训练代码)
  • 周报(9)<仅供自己学习>
  • 前端网络性能优化问题
  • 【Go】-bufio库解读
  • Vue3-02
  • 微信小程序自定义tabbar的实现
  • Ekman理论回归
  • Spring Cloud Gateway 网关
  • 【MySQL 保姆级教学】事务的隔离级别(详细)--下(14)
  • c#中通过自定义Converter实现定制DateTime的序列化格式
  • SQL MID() 函数详解
  • TCP协议(三)
  • C#编写的日志记录组件 - 开源研究系列文章
  • git push时报错! [rejected] master -> master (fetch first)error: ...
  • Redis 安全
  • 统信UOS开发环境支持Golang
  • VRRP HSRP GLBP 三者区别
  • ForEach刷新UI机制
  • React Native 全栈开发实战班 - 第四部分:用户界面进阶之动画效果实现