我正在开发一个接受密钥和数据(值)的REST资源......我想要健壮,所以这些数据可以是任何东西。它可以是从字符串到文件。
为了解决这个问题,我的PUT REST方法就在帖子的最后。没有什么好看的,只是试图PUT基本数据。如果我发送的数据是一个字符串,那就没问题了。
但是,如果我尝试发送文件,则会收到此错误:org.jboss.resteasy.spi.UnsupportedMediaTypeException: Cannot consume content type
。这就是为什么这对我没有意义:
如果我将@Consumes
从application/octet-stream
更改为@Consumes("multipart/form-data")
,我可以直接发送文件。在检查存储的文件时,我看到如下内容:
------WebKitFormBoundaryfuQalizBHtg1BiLJ
Content-Disposition: form-data; name="fileUpload1"; filename="uploadedFile.extension"
Content-Type: application/octet-stream
/* file information here */
------WebKitFormBoundaryfuQalizBHtg1BiLJ--
请注意,Content-Type
应该是application/octet-stream
,这是我之前尝试过的,但得到了Cannot consume content type
例外。我不知道是什么原因引起的。我正在使用Chrome的Advanced Rest Client扩展程序发送我的请求,它看起来像这样:https://i.imgur.com/KvKCIkl.jpg
有什么想法?谢谢!
@PUT
@Path("{key}")
@Consumes("application/octet-stream")
public Response addData(
final @PathParam("key") String key,
final InputStream data) {
final Service service = new Service();
try {
service.addData(key, data);
} finally {
IOUtils.closeQuietly(data
}
return Response.status(204).build();
}
答案 0 :(得分:0)
multipart/form-data
消息包含一系列由边界划分的部分。每个部分都有自己的Content-Type。因此,在您的示例中,Content-Type: application/octet-stream
是一个(可能是唯一的)部分的Content-Type,但整个邮件的Content-Type是multipart/form-data
。包含多个部分的完整邮件可能如下所示:
Content-Type: multipart/form-data; boundary=WebKitFormBoundaryfuQalizBHtg1BiLJ
------WebKitFormBoundaryfuQalizBHtg1BiLJ
Content-Disposition: form-data; name="fileUpload1"; filename="uploadedFile.extension"
Content-Type: application/octet-stream
/* file information here */
------WebKitFormBoundaryfuQalizBHtg1BiLJ--
------WebKitFormBoundaryfuQalizBHtg1BiLJ
Content-Type: text/plain
/* some text here */
------WebKitFormBoundaryfuQalizBHtg1BiLJ--