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

时间:2016-04-06 12:23:40

标签: java json rest jersey multipart

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

到目前为止,上传工作正常。我现在关心的是创建响应。我正在考虑创建一个多部分响应,其中包含1个bodypart中的新图像,同时将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.

我一直在寻找一段时间,但无论如何都找不到解决方法。 您可以帮助指出代码的错误以及应该采取什么样的方法来解决这个问题。

1 个答案:

答案 0 :(得分:3)

我认为com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart不是你想要的课程。

泽西岛2.x

对于Jersey 2.x,请使用MultiPart包中的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)

泽西GitHub repository上有多部分请求的示例。

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

泽西岛1.x

对于旧的Jersey 1.x,您可以使用MultiPart包中的com.sun.jersey.multipart类。

jersey-multipart依赖是必要的:

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