使用 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>
我正在通过尝试创建一个 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>