@FormDataParam和@FormParam有什么区别

@FormDataParam和之间有什么区别@FormParam

@FormDataParam在一种方法中使用了倍数,但它抛出了媒体不支持的类型错误。但是当我使用时 @FormParam,我得到了价值。

那么,我需要知道两者之间的区别是什么?

回答:

  • @FormDataParam应该用于Multipart类型数据(即multipart/form-dataMediaType.MULTIPART_FORM_DATA),其原始格式类似于

        Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x

Content-Disposition: form-data; name="submit-name"

Larry

--AaB03x

Content-Disposition: form-data; name="files"; filename="file1.txt"

Content-Type: text/plain

... contents of file1.txt ...

--AaB03x--

Multipart主要用于发送二进制数据,例如非文本文件。

  • @FormParam用于url编码的请求参数(即application/x-www-form-urlencodedMediaType.APPLICATION_FORM_URLENCODED),其原始格式如下
    param1=value1&param2=value2

这两种类型都主要用于客户端形式。例如

<form method="POST" action="someUrl">

<input name="gender" type="text">

<input name="name" type="text">

</form>

以上将发送请求参数为application/x-www-form-urlencoded。它会以原始形式发送

gender=male&name=peeskillet

在服务器端,我们可以@FormParam为表单中的每个命名参数使用

@FormParam("gender") String gender, @FormParam("name") String name

但是,如果我们需要将图像与参数一起发送,则application/x-form-url-

encoded数据类型是不够的,因为它仅处理文本。所以我们需要使用Multipart

<form method="POST" action="someUrl", enctype="multipart/form-data">

<input name="gender" type="text">

<input name="name" type="text">

<input name="avatar" type="file">

</form>

在这里指定了Multipart类型,现在浏览器将发出类似以下内容的请求

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x

Content-Disposition: form-data; name="gender"

Male

--AaB03x

Content-Disposition: form-data; name="name"

Peskillet

--AaB03x

Content-Disposition: form-data; name="avatar"; filename="image.png"

Content-Type: image/png

... binary content of image file ...

--AaB03x--

在服务器上,类似于application/x-www-form-

urlencoded上面的示例,对于每个Multipart参数(或更精确地说,该字段),我们可以@FormDataParam用来表示每个参数

@FormDataParam("gender") String gender,

@FormDataParam("name") String name,

@FormDataParam("avatar") InputStream avatar

  • HTML文档中的表单

以上是 @FormDataParam和@FormParam有什么区别 的全部内容, 来源链接: utcz.com/qa/417211.html

回到顶部