IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> RestClient : Required request part ‘file‘ is not present -> 正文阅读

[Java知识库]RestClient : Required request part ‘file‘ is not present

问题重现

最近在试用 VS CodeRestClient 插件,当提交使用 POST 上传文件时,出现 Required request part 'file' is not present 的错误。

环境

restclient 插件为 : humao.rest-client,其图标如下在这里插入图片描述
接口由spring-boot 提供,代码如下:

@RestController
@RequestMapping("/rest-client")
public class RestClientController {
    @PostMapping("/post/file")
    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
        Map<String, Object> resultMap = buildRestMap();
        resultMap.put("msg", "上传文件成功!");
        resultMap.put("fileName", file.getOriginalFilename());
        resultMap.put("fileSize", file.getSize());
        return resultMap;
    }

    /**
     * 构建空Map
     * 
     * @return
     */
    private Map<String, Object> buildRestMap() {
        return new HashMap<>();
    }
}

分析

根据报错 Required request part 'file' is not present 含义,请求中的file参数没有实例,即没有完成参数绑定。

通过实验,可能出现该错误的地方有如下几处:

  • 没有传参。这种是因为即使在接口参数前标注了 @RequestParam,但是在请求中没有传参,在GET、PUT、DELETE中都会发生。
  • 文件上传请求中没有指定将文件绑定到那个参数,或者参数绑定与接口需要的不一致。如本例中,接口将文件参数绑定到了 file。客户端请求时,就应该将文件绑定到该字段,即请求体描述应该这样写
# name 与接口文件接受参数保持一致
# filename 是文件名称,一般填写真实的名称即可,但也可以根据需要改一个名称
Content-Disposition: form-data; name="file"; filename="tmp01.txt"
  • 文件上传请求格式不对。格式不对 RestClient提交的数据就不对,导致接口解析的数据也就不对。

humao.rest-client 中,文件上传的格式如下:

### 
# POST 请求 
POST {file-upload-url}
# 请求内容类型
Content-Type: multipart/form-data; boundary=WebAppBoundary

# 请求体  注意??:空一行
--WebAppBoundary
# 描述
Content-Disposition: form-data; name="{文件接受参数}"; filename="{文件名}"

#文件地址 注意??:空一行
< D:\tmp\tmp01.txt
--WebAppBoundary--

注意: 空行!!!空行!!!

解决

最终使用如下接口文件请求成功

### 
# POST 请求 上传文件
POST http://localhost:8080/rest-client/post/file
# 请求内容类型
Content-Type: multipart/form-data; boundary=WebAppBoundary

# 请求体  注意??:空一行
--WebAppBoundary
# 描述
Content-Disposition: form-data; name="file"; filename="tmp01.txt"

#文件地址 注意??:空一行
< D:\tmp\tmp01.txt
--WebAppBoundary--

请求结果:

HTTP/1.1 200 
Content-Type: application/json
Transfer-Encoding: chunked
Date: Sat, 18 Jun 2022 01:11:20 GMT
Connection: close

{
  "msg": "上传文件成功!",
  "fileName": "tmp01.txt",
  "fileSize": 279936
}

在这里插入图片描述

总结

humao.rest-client 是众多 Rest Client 实现中的一种,humao.rest-client是其中最流行的一个。
本文介绍了VSCode中的使用。

在IntelliJ IDEA 2021.1.1 (Ultimate Edition) \ Build #IU-211.7142.45, built on April 30, 2021中默认也集成了该工具,其效果如下:
在这里插入图片描述
目前 Rest Client 的实现非常多,VScode 插件的实现就有300多款款,有些直接提供了更易操作的GUI界面,下图是 VsCode 插件库中搜索到的 Rest Client 工具。
在这里插入图片描述

许多主流浏览器插件也有对Rest Client 的实现,如下图是微软 Edge 插件中对RestClient 的实现。在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 17:56:45  更:2022-06-25 17:59:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 10:44:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码