【问题标题】:Can't find @FormDataParam in Jersey 2.17在 Jersey 2.17 中找不到 @FormDataParam
【发布时间】:2015-05-27 10:09:18
【问题描述】:

我对 Web 服务还很陌生,所以我从基本示例开始。这与文件上传有关。我正在为非 Maven 开发人员使用最新 (2.17) 版本的 Jersey 捆绑包。它指出:

bundle 包含 JAX-RS 2.0 API jar、所有核心 Jersey 模块 jar 以及所有必需的第 3 方依赖项

。问题是我无法编译这部分:

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
    @FormDataParam("file") InputStream uploadedInputStream,
    @FormDataParam("file") FormDataContentDisposition fileDetail) {
    String uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName();
    // save it
    writeToFile(uploadedInputStream, uploadedFileLocation);
    String output = "File uploaded to : " + uploadedFileLocation;
    return Response.status(200).entity(output).build();
}

似乎 @FormDataParam 在 Jersey 2.17 捆绑包中不存在,尽管文档说它存在。 2.17 捆绑包不完整吗?我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    捆绑包仅包含核心模块(及其依赖项)。不幸的是,Multipart 不是核心的一部分。你还需要this dependency (Maven)

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.17</version>
    </dependency
    

    如果您不使用 Maven,据我所知,这个工件只有一个其他依赖项(尚未包含在捆绑包中),它是 mimepull-1.9.3

    您可以在下面下载这两个工件

    【讨论】:

    • 是的,这解决了问题。但是,我仍然想知道,为什么非 Maven 用户的捆绑包不完整,或者为什么 Jersey 网站上没有指向缺失库的链接,因为它们是 Jersey 的 API 文档的一部分?
    • 我不知道,但我猜是因为他们建议使用 Maven。文档中的所有部分都具有 Maven 依赖项。我只是创建了一个 Maven 项目,并添加了多部分 Maven 依赖项,然后看看它引入了什么。它依赖于捆绑包中已经存在的许多 jar。我只是比较了一下,这就是我发现mimepull 是唯一需要的另一个。这很麻烦,但这就是我们使用 Maven 的原因。至于为什么它不在捆绑包中,我猜是因为还有很多其他扩展项目。如果他们包括多部分,那么他们将不得不包括所有
    • 其中。也许他们只是想包含所需的核心,因为像 JSON 支持这样的一些东西有不同的实现。包含所有这些额外的第三方依赖项可能没有意义,这些模块依赖于
    • 实际上,至少在多部分的情况下,如果您单击我帖子中的链接,您实际上会看到该文档有一个指向 Maven 存储库的链接,该存储库是工件所在的位置,以及mimpull
    • 现在浏览文档的某些部分,我可以看到他们确实在下面显示了 Maven 依赖项的“如果您不使用 Maven”部分,例如 here跨度>
    【解决方案2】:

    您必须从https://mvnrepository.com/ maven repositoryMaven Repository下载以下依赖项

    <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart -->
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.31</version>
    </dependency>
    

    它不是 spring-boot-starter-jersey 的一部分

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
    

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 1970-01-01
      • 2015-08-02
      • 2020-12-19
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 2015-05-28
      • 2020-12-28
      相关资源
      最近更新 更多