当前位置: 首页 > 知识库问答 >
问题:

@FormDataParam和@FormParam有什么区别

景翰音
2023-03-14

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

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

所以,我需要知道他们之间的区别是什么?

共有2个答案

徐新荣
2023-03-14

从文档FormParam:

将请求实体主体中包含的表单参数的值绑定到资源方法参数。值是URL解码的,除非使用编码注释禁用此功能。可以使用DefaultValue注释指定默认值。如果请求实体主体不存在或是不受支持的媒体类型,则使用默认值。

和FormDataParam

将“multipart/form data”请求实体主体的命名主体部分绑定到资源方法参数。

狄阳秋
2023-03-14

>

  • @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-wow-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--
    

    在服务器上,与上面的应用程序/x-www-form-urlencoded示例类似,对于每个多部分参数(更精确地说是字段),我们可以使用@FormDataParam表示每个参数

    @FormDataParam("gender") String gender,
    @FormDataParam("name") String name,
    @FormDataParam("avatar") InputStream avatar
    

    另见:

    • 超文本标记语言文档中的表单

  •  类似资料:
    • 问题内容: 和之间有什么区别? 我在一种方法中使用了倍数,但它抛出了媒体不支持的类型错误。但是当我使用时 ,我得到了价值。 那么,我需要知道两者之间的区别是什么? 问题答案: 应该用于Multipart类型数据(即或),其原始格式类似于 Multipart主要用于发送二进制数据,例如非文本文件。 用于url编码的请求参数(即或),其原始格式如下 这两种类型都主要用于客户端形式。例如 以上将发送请求

    • 问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。

    • 本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块  

    • 问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。

    • 发展至今(2020 年 6 月份),GCC 编译器已经更新至 10.1.0 版本,其功能也由最初仅能编译 C 语言,扩增至可以编译多种编程语言,其中就包括 C++ 。 除此之外,当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序,甚至于 GCC 6 以及之前的版本还支持编译 Java 程序。但本

    • 问题内容: 比较PMD和CheckStyle有一个问题。但是,我找不到关于PMD和FindBugs之间差异/相似性的详尽分类。我相信一个关键的区别是PMD适用于源代码,而FindBugs适用于编译的字节码文件。但是就功能而言,这应该是一个选择,还是两者相辅相成? 问题答案: 我同时使用。我认为他们是相辅相成的。 正如您所说,PMD在源代码上工作,因此会发现诸如以下问题:违反命名约定,缺少花括号,放