使用 Jersey 在多部分响应中返回图像和 JSON

Returning both image and JSON in multipart response with Jersey

我正在通过尝试创建一个 Rest 服务来学习 Jersey,该服务从客户端接收图像、处理图像和 returns 带有附加信息(即关于处理细节)的新图像。

到目前为止,上传工作正常。我现在关心的是创建响应。我正在考虑创建一个包含 1 个主体部分中的新图像的多部分响应,同时将 JSON 字符串(包含附加信息)添加到另一个主体部分中。但是我没有成功。代码如下:

        File image = process(oldImage);
        Info info = getInfo();
        String jsonStr = toJson(info);

        MimeMultipart multiPart = new MimeMultipart();

        MimeBodyPart imagePart = new MimeBodyPart();
        imagePart.setContent(Files.readAllBytes(image.toPath()), MediaType.APPLICATION_OCTET_STREAM);

        MimeBodyPart jsonPart = new MimeBodyPart();
        jsonPart.setContent(jsonStr, MediaType.APPLICATION_JSON);

        multiPart.addBodyPart(imagePart);
        multiPart.addBodyPart(jsonPart);
        return Response.ok(multiPart, "multipart/mixed").build();

我收到如下错误信息:

MessageBodyWriter not found for media type=multipart/mixed, type=class com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart, genericType=class com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart.

我已经搜索了一段时间,但还是没有找到解决方法。 如果你能帮助指出代码有什么问题,以及解决这个问题应该采取什么好方法,那就太好了。

我觉得com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart不是你想要的class

球衣 2.x

对于 Jersey 2.x,使用 MultiPart class from the org.glassfish.jersey.media.multipart 包。

要使用多部分功能,您需要将 jersey-media-multipart 模块添加到 pom.xml 文件:

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

并且不要忘记注册 MultiPartFeature:

final Application application = new ResourceConfig()
    .packages("org.glassfish.jersey.examples.multipart")
    .register(MultiPartFeature.class)

有一个 Jersey 上的多部分请求示例 GitHub repository

有关更多详细信息,请查看 Jersey 2.x documentation

球衣 1.x

对于旧球衣 1.x,您可以使用 MultiPart class from the com.sun.jersey.multipart 包。

jersey-multipart 依赖项是必需的:

<dependency>
    <groupId>com.sun.jersey.contribs</groupId>
    <artifactId>jersey-multipart</artifactId>
    <version>1.19.1</version>
</dependency>