@FormDataParam和@FormParam有什么区别
和 有什么区别?@FormDataParam
@FormParam
我在一个方法中使用了多个,但它抛出了媒体不受支持的类型错误。但是当我使用时,我得到了值。@FormDataParam
@FormParam
那么,我需要知道他们两者之间有什么区别?
和 有什么区别?@FormDataParam
@FormParam
我在一个方法中使用了多个,但它抛出了媒体不受支持的类型错误。但是当我使用时,我得到了值。@FormDataParam
@FormParam
那么,我需要知道他们两者之间有什么区别?
@FormDataParam
应该与多部分类型数据一起使用(即 或 ),其原始形式看起来像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-encoded
<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>
这里指定了多部分类型,现在浏览器将发送请求,如下所示
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
@FormDataParam
@FormDataParam("gender") String gender,
@FormDataParam("name") String name,
@FormDataParam("avatar") InputStream avatar
另请参阅:
从文档 FormParam 中:
将请求实体正文中包含的表单参数的值绑定到资源方法参数。除非使用编码批注禁用此操作,否则将对值进行 URL 解码。可以使用默认值批注指定默认值。如果请求实体正文不存在或属于不受支持的媒体类型,则使用默认值。
将“多部分/表单数据”请求实体正文的命名正文部分绑定到资源方法参数。