Java RESTEasy:无法使用内容类型-即使使用正确的@Consumes
我正在处理一个REST资源,它接收一个键和数据(值)。。。我希望变得健壮,这样数据可以是任何东西。它的范围可以从字符串到文件 为了处理这个问题,我在文章的末尾使用了PUT-REST方法。没什么特别的,只是想把基本数据放进去。如果我发送的数据是一个字符串,它的工作没有问题 但是,如果我试图跨多个站点发送文件,则会出现以下错误:Java RESTEasy:无法使用内容类型-即使使用正确的@Consumes,java,rest,resteasy,Java,Rest,Resteasy,我正在处理一个REST资源,它接收一个键和数据(值)。。。我希望变得健壮,这样数据可以是任何东西。它的范围可以从字符串到文件 为了处理这个问题,我在文章的末尾使用了PUT-REST方法。没什么特别的,只是想把基本数据放进去。如果我发送的数据是一个字符串,它的工作没有问题 但是,如果我试图跨多个站点发送文件,则会出现以下错误:org.jboss.resteasy.spi.UnsupportedMediaTypeException:无法使用内容类型。这就是为什么这对我来说没有意义: 如果我将@Con
org.jboss.resteasy.spi.UnsupportedMediaTypeException:无法使用内容类型
。这就是为什么这对我来说没有意义:
如果我将@Consumes
从应用程序/octet流
更改为@Consumes(“多部分/表单数据”)
,我就可以发送一个文件。检查存储的文件时,我看到如下内容:
------WebKitFormBoundaryfuQalizBHtg1BiLJ
Content-Disposition: form-data; name="fileUpload1"; filename="uploadedFile.extension"
Content-Type: application/octet-stream
/* file information here */
------WebKitFormBoundaryfuQalizBHtg1BiLJ--
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--
请注意,内容类型
应该是应用程序/octet流
,这是我之前尝试消费的内容,但得到了无法消费内容类型
异常。我不知道这是什么原因造成的。我正在使用适用于Chrome的高级Rest客户端扩展发送我的请求,它看起来像这样:
有什么想法吗?谢谢
@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();
}
multipart/form data
消息包含一系列被边界分割的部分。每个部分都有自己的内容类型。因此,在您的示例中,Content-Type:application/octet-stream
是一个(可能是唯一一个)部分的内容类型,但整个消息的内容类型是multipart/form-data
。包含多个部分的完整消息可能如下所示:
------WebKitFormBoundaryfuQalizBHtg1BiLJ
Content-Disposition: form-data; name="fileUpload1"; filename="uploadedFile.extension"
Content-Type: application/octet-stream
/* file information here */
------WebKitFormBoundaryfuQalizBHtg1BiLJ--
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--
很有趣,谢谢。有什么理由我不能让我的
@消费成为应用程序/八位字节流
?我不明白为什么当“不能使用内容类型”异常应该匹配时会出现该异常。它不匹配。您正在发送多部分/表单数据
,这应该由您的资源类使用<代码>应用程序/八位字节流
只是其中的一部分。是否可以发送应用程序/八位字节流
,这也可以被我的资源消耗?当然!我没有尝试使用高级Rest客户端,而是使用cURL。