java - 为什么 "FormDataMultiPart"类型参数被区别对待

标签 java rest jersey

我正在编写一个小网络应用程序,将文件上传到网络服务器。我一切正常,但令我感到困惑的是,几乎所有从客户端(浏览器)发送的参数都必须在服务器端注入(inject)单词 @FormDataParam,除了 FormDataMultiPart > 输入参数。 有人可以向我解释一下吗?

问候, 贾努斯

最佳答案

一般情况下,所有实体主体参数都是不带任何注解的参数。例如使用 JSON 或 XML,您会看到

@POST
@Consumes({"application/json", "application/xml"})
public Response post(RequestEntity entity) {
}

这里,处理 JSON 或 XML 的 MessageBodyReader 将用于将实体流反序列化为 RequestEntity

这与FormDataMultiPart相同。有一个 MessageBodyReader 来处理整个多部分流的反序列化,并为 Jersey 运行时创建 FormDataBodyPart 以便在调用时传递给资源方法。

@FormDataParam 更像是 @FormParam@PathParam@QueryParam 等。我们可以有多个参数。此注释的每个参数代表多部分请求的单个部分

因此,我们可以选择使用 FormDataMultiPart 将整个请求放入单个实体中;在这种情况下,我们将以编程方式提取这些部分。或者,我们可以使用 @FormDataParam 注释以声明方式提取每个部分,其中注释的值将是该部分的名称。 p>

如果我们使用FormDataMultiPart,我们必须手动从中提取所有部分。我们会在每个部分的名称未知的情况下使用它。或者有很多部分,其中声明每个部分对于开发人员来说都是乏味的工作或丑陋的。

关于java - 为什么 "FormDataMultiPart"类型参数被区别对待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56122459/

相关文章:

java - 从一行中读取整数

java - 我应该用threeten代替joda-time吗

rest - Jax-rs http header 范围

java - 通过 Content-Type 参数调用 REST 服务的注释

java - 状态 404 Jersey rest 服务与 tomcat 8

java - ProGuard 输出不运行

java - 声音在 Java 中不起作用

java - REST Web 服务如何工作

java - 什么是实现 REstful API 的最佳轻量级/高性能嵌入式 Web 服务器

json - Jersey - Maven - MessageBodyWriter 未找到媒体类型=应用程序/json