Java @FormDataParam和@FormParam有什么区别
Java @FormDataParam和@FormParam有什么区别,java,jersey,jax-rs,multipartform-data,Java,Jersey,Jax Rs,Multipartform Data,@FormDataParam和@FormParam之间有什么区别 我在一个方法中使用了多个@FormDataParam,但它抛出了媒体不支持的类型错误。但是当我使用@FormParam时,我得到了值 所以,我需要知道它们之间的区别是什么? @FormDataParam应与多部分类型数据(即多部分/表单数据或MediaType.Multipart\u表单数据)一起使用,其原始形式类似于 内容类型:多部分/表单数据;边界=AaB03x --AaB03x 内容配置:表单数据;name=“提交名称” 拉
@FormDataParam
和@FormParam
之间有什么区别
我在一个方法中使用了多个@FormDataParam
,但它抛出了媒体不支持的类型错误。但是当我使用@FormParam
时,我得到了值
所以,我需要知道它们之间的区别是什么?
应与多部分类型数据(即@FormDataParam
或多部分/表单数据
)一起使用,其原始形式类似于MediaType.Multipart\u表单数据
Multipart主要用于发送二进制数据,如非文本文件内容类型:多部分/表单数据;边界=AaB03x --AaB03x 内容配置:表单数据;name=“提交名称” 拉里 --AaB03x 内容配置:表单数据;name=“文件”;filename=“file1.txt” 内容类型:文本/纯文本 ... file1.txt的内容。。。 --AaB03x--
用于url编码的请求参数(即@FormParam
或application/x-www-form-urlencoded
),其原始形式如下MediaType.application\u form\u urlencoded
param1=value1¶m2=value2
<form method="POST" action="someUrl">
<input name="gender" type="text">
<input name="name" type="text">
</form>
在服务器端,我们可以对表单中的每个命名参数使用@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>
在服务器上,与上面的应用程序/x-www-form-urlencoded
示例类似,对于每个多部分参数(更精确地说是字段),我们可以使用@FormDataParam
表示每个参数
@FormDataParam("gender") String gender,
@FormDataParam("name") String name,
@FormDataParam("avatar") InputStream avatar
另请参见:
FormDataParam与多部分/表单数据一起使用。这是比使用FormParam更有效的方法来传输附件之类的二进制数据。是的,现在它清楚了。但我唯一不能理解的是。我的表单未使用
多部分/表单数据
。尽管如此,当我只有一个参数时,我仍然能够以@FormDataParam的形式获取字符串。但当我改为双参数时,它就开始工作了。将其更改为@FormParam后,它现在可以工作了。我认为在您的情况下,@FormDataParam
被完全忽略,因为预期的媒体类型是application/x-www-form-urlencoded
。至于传入的数据,因为没有使用@FormParam
,它只是将数据作为整个请求字符串提供给您。至于“不工作”,是因为一个方法可以接受一个body参数,通常这个参数没有注释,比如在获取JSON POJO时。如果您尝试再添加一个参数,Jersey不知道哪一个是body参数,因此它在启动时抛出一个错误。如果要在应用程序中注册MultiPartFeature
,Jersey不会抛出错误,因为该功能可以识别@FormDataParam
注释,因此它认为这是您所期望的。虽然我不确定反序列化是否会成功。您可以看到
@FormDataParam("gender") String gender,
@FormDataParam("name") String name,
@FormDataParam("avatar") InputStream avatar