java - 为什么“FormDataMultiPart”类型参数被区别对待
问题描述
我正在编写将文件上传到网络服务器的小型网络应用程序。我得到了一切工作,但令我感到困惑的是,几乎所有从客户端(浏览器)发送的参数都必须在服务器端注入@FormDataParam
除FormDataMultiPart
类型参数之外的单词。有人可以向我解释一下吗?
问候, 亚努斯
解决方案
通常,所有实体体参数都是没有任何注释的参数。例如使用 JSON 或 XML,您会看到
@POST
@Consumes({"application/json", "application/xml"})
public Response post(RequestEntity entity) {
}
在这里,MessageBodyReader
处理 JSON 或 XML 的 将用于处理将实体流反序列化为RequestEntity
.
这与FormDataMultiPart
. 有一个MessageBodyReader
处理反序列化整个多部分流并FormDataBodyPart
为 Jersey 运行时创建以在调用时传递给资源方法的方法。
@FormDataParam
被视为更像@FormParam
, @PathParam
,@QueryParam
等。我们可以有多个参数。此注释的每个参数代表多部分请求的单个部分。
因此,我们可以选择使用 ; 将整个请求放入单个实体中FormDataMultiPart
。在这种情况下,我们将以编程方式提取零件。或者我们可以使用注解以声明方式提取每个部分@FormDataParam
,其中注解的值将是该部分的名称。
如果我们使用FormDataMultiPart
,我们将不得不手动从中提取所有部分。我们将在每个部分的名称未知的情况下使用它。或者有很多部分,其中声明每个部分对开发人员来说都是乏味的或丑陋的。
推荐阅读
- python - 如何使用python读取目录的所有新文件?
- django - Travis ci 编码环境变量对于项目中的其他 github 用户失败
- php - 我在 php 中的爬虫有一些问题
- swift - UIPickerView 作为 UITextField 输入模式而不是键盘
- node.js - Node.js 错误:ENONET
- ruby-on-rails - Rails 5,范围与另一个范围相反
- java - 带有 postgresql 和 java 的 Docker 用于 bitbucket 管道
- jenkins - Jenkins - 来自 SCM 的流水线脚本在从属设备上执行,而不是在主设备上执行
- android - Network Api Call Android 列表中的重复项目
- java - 在java中使用字符串值更改日志级别