首页 > 解决方案 > 为什么“FormDataMultiPart”类型参数被区别对待

问题描述

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

问候, 亚努斯

标签: javarestjersey

解决方案


通常,所有实体体参数都是没有任何注释的参数。例如使用 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,我们将不得不手动从中提取所有部分。我们将在每个部分的名称未知的情况下使用它。或者有很多部分,其中声明每个部分对开发人员来说都是乏味的或丑陋的。


推荐阅读