@FormDataParam和@FormParam有什么区别?
我在一个方法中使用了多个@FormDataParam,但它抛出了媒体不支持的类型错误.但是当我使用@FormParam时,我得到了值.
所以,我需要知道他们俩之间的区别是什么?
解决方法:
> @FormDataParam应该与Multipart类型数据一起使用(即multipart / form-data或MediaType.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-urlencoded或MediaType.APPLICATION_FORM_URLENCODED),原始形式看起来像
param1=value1¶m2=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编码的数据类型是不够的,因为它只处理文本.所以我们需要使用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
也可以看看: