为什么“ FormDataMultiPart”类型参数被不同地对待

时间:2019-05-14 03:06:49

标签: java rest jersey

我正在编写一个小型Web应用程序,将文件上传到Web服务器。我可以正常工作,但是我感到困惑的是,几乎所有从客户端(浏览器)发送的参数都必须在服务器端注入@FormDataParam字样,而FormDataMultiPart类型的参数除外。 有人可以向我解释一下吗?

关于, 贾努斯

1 个答案:

答案 0 :(得分:1)

通常,所有实体主体参数都是没有任何注释的参数。例如JSON或XML,您会看到

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

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

FormDataMultiPart相同。有一个MessageBodyReader可以处理反序列化整个多部分流,并创建FormDataBodyPart以便JAX-RS运行时在调用资源方法时传递给资源方法。

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

因此,我们可以选择使用FormDataMultiPart将整个请求放入单个实体,也可以将它们预先分离成各个部分。如果使用FormDataMultiPart,则必须从其中手动提取所有部分。在每个部分的名称未知的情况下,我们将使用它。或有很多部分,声明每个部分都不符合编码器的要求。