java - Jersey - 带有文本正文部分的多部分数据表单

标签 java rest glassfish multipartform-data jersey-2.0

我正在尝试将多部分表单作为 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();
    }

因此所有字符串参数均为空。

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

enter image description here

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

谢谢

最佳答案

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

关于java - Jersey - 带有文本正文部分的多部分数据表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42441919/

相关文章:

postgresql - 带有 GlassFish 4 和 PostGIS 的 JPA 实体

java - 如何将单独 jar 中的 JPA 实体聚合到单个持久性单元中?

Java 8 - 一旦 Stream 被消费和操作就会给出错误,但在另一种情况下它不会

java - 在 Java 中,不允许具有 run() 方法的类作为 new Thread() 的参数

ruby - Office 365 API 在/me/calendars 端点上抛出 500

linux - 如何避免 glassfish jsf 中的连接超时?

java - 当要解析的元素是 json 字符串的元素时,使用 gson 解析 json 的最简单方法是什么?

java - 是否可以让 <error-page> servlet 忽略某些请求?

java - JPA transient 注释和 JSON

java - Glassfish 2.1 CLIENT-CERT 如何获取 Principal