【问题标题】:Java Jax-rs - get only file body in payload - remove headersJava Jax-rs - 仅获取有效负载中的文件主体 - 删除标头
【发布时间】:2021-07-21 07:41:27
【问题描述】:

我必须使用 UI/Postman 客户端将二进制文件上传到我的服务器。我的 Rest API 后端代码是:

    @POST
    @Produces({JSONHeaders.MEDIA_TYPE_JSONAPI, MediaType.APPLICATION_JSON})
    @Path("loadLicense")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response loadLicense2(@ApiParam("load a license") File input) {
        ....
    }

但是我得到的文件添加了我不需要的标题详细信息。文件内容类似于:

----------------------------013134317098674079511595^M
Content-Disposition: form-data; name="file"; filename="license.lic"^M
Content-Type: application/octet-stream^M
^M
^@^@^T.^@^@m.....^@^@^@^K^@^A^@^@^@^@^C^@^@^@(^@.^E^@^@^@^K^@.^@^@^@^G.^@^@^@^K^@.^@^@^@^@^B^@^@^@^K^@.^@^@^@^@^@^@^@^@^K^@.^@^@^@^@^F^@^@^@^K^@.^@^@^
^@^@^@^U^@^N^BGR^@^@^@^@^M^@^G^Bc^@^@^@^@^K^@^O^B1.0^@^@^@^@^Q^@4^Bpermanent^@^@^@^@^G^@.
^G.^V......I..^HC_.^^.^U...Y..G.^K.R.^?^O&..^.{V.Z.......h^B.<^O....w'#bk.^B]..*...8.W93...Z.\.....     ..g.a+.....,^M
----------------------------013134317098674079511595--^M

但我只需要二进制内容。有什么办法吗?

注意:我试过@FormParam - 它不起作用,我收到了这个错误 The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded]

试过@FormDataParam - 无法在代码中解决它。

【问题讨论】:

    标签: java jax-rs


    【解决方案1】:

    您可能需要使用@FormDataParam 而不是@FormParam,具体取决于您通过邮递员发送数据的方式。它们有不同的用途,即用于不同的 MIME 类型:

    • @FormParam 旨在与 MIME 类型 application/x-www-form-urlencoded(常量 MediaType.APPLICATION_FORM_URLENCODED)一起使用

    • @FormDataParam 旨在与multipart/form-data 一起使用(常量MediaType.MULTIPART_FORM_DATA

    以下 sn-p 期望文件通过表单数据发送:

        @POST
        @Produces({JSONHeaders.MEDIA_TYPE_JSONAPI, MediaType.APPLICATION_JSON})
        @Path("loadLicense")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        public Response loadLicense2(
                @FormDataParam("file") InputStream istream,
                @FormDataParam("file") FormDataContentDisposition disp) {
        }
    

    输入流包含二进制数据,第二个参数为您提供有关上传文件的一些信息,例如文件名。

    为此,您需要 jersey-media-multipart 工件:

    https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart

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

    【讨论】:

    • 即使添加了 maven 依赖项,我也无法解析 @FormDataParam。
    • 我犯了一个错误 - 版本应该是3.0.2,而不是3.02。相应地编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多