我正在编写一个小网络应用程序,将文件上传到网络服务器。我一切正常,但令我感到困惑的是,几乎所有从客户端(浏览器)发送的参数都必须在服务器端注入(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/