【问题标题】:Jersey - Multipart data form with text body partsJersey - 带有文本正文部分的多部分数据表单
【发布时间】:2017-02-24 15:06:32
【问题描述】:

我正在尝试将 Multipart Form 作为 POST 请求发送到 Jersey 2.22.1 服务器。此请求包含文件和多个文本字段。服务器端发生的情况是我只能接收作为 InputStream 的文件,但我接收的所有文本参数都是空的。

这是我所拥有的:

pom.xml:

<dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.22.1</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.22.1</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.22.1</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.22.1</version> <!-- Make sure the Jersey matches
                             the one you are currently using -->
    </dependency>

    <dependency>
        <groupId>org.jvnet.mimepull</groupId>
        <artifactId>mimepull</artifactId>
        <version>1.9.6</version>
    </dependency>

web.xml:

<servlet>
    <servlet-name>vedica-api</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>
            org.glassfish.jersey.media.multipart.MultiPartFeature
        </param-value>
    </init-param>

    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.nws.vedica.api,com.fasterxml.jackson</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

和代码:

    import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
...

@POST
    @Produces("text/plain")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response createDocument(
           @FormDataParam("meno") String name,
            @FormDataParam("rc") String rc,
            @FormDataParam("typzml") String typzml,
            @FormDataParam("auto") String auto,
            @FormDataParam("verzia") String verzia,
            @FormDataParam("documentcustomname") String doccustomname,
            @FormDataParam("docpath") String docpath,
            @FormDataParam("file") InputStream data,
            @FormDataParam("file") FormDataContentDisposition fileInfo
    ) {
        ...
        return Response.ok().build();
    }

所以所有的字符串参数都是空的。

这是我如何发送请求的屏幕截图:

你能解释一下我做错了什么以及如何解决这个问题吗?

谢谢

【问题讨论】:

  • 我认为 FormParam 它区分大小写,也许它没有任何关系,但是您是否尝试过匹配请求中的大小写和@FormDAtaParam ie typzml vs TypZML
  • 好吧,你可以看到有完全匹配的参数,然后是部分匹配的参数......全部为空

标签: java rest glassfish multipartform-data jersey-2.0


【解决方案1】:

好的,所以我发现是我的 IDE 错误地创建了 war 包。代码和依赖都很好,但至少我发现参数是区分大小写的!

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 2015-01-25
    • 2014-07-03
    • 1970-01-01
    • 2021-10-05
    • 2014-11-02
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多