我正在编写一个小型Web应用程序,将文件上传到Web服务器。我可以正常工作,但是我感到困惑的是,几乎所有从客户端(浏览器)发送的参数都必须在服务器端注入@FormDataParam
字样,而FormDataMultiPart
类型的参数除外。
有人可以向我解释一下吗?
关于, 贾努斯
答案 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
,则必须从其中手动提取所有部分。在每个部分的名称未知的情况下,我们将使用它。或有很多部分,声明每个部分都不符合编码器的要求。