Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTEasy:无法使用内容类型-即使使用正确的@Consumes_Java_Rest_Resteasy - Fatal编程技术网

Java RESTEasy:无法使用内容类型-即使使用正确的@Consumes

Java RESTEasy:无法使用内容类型-即使使用正确的@Consumes,java,rest,resteasy,Java,Rest,Resteasy,我正在处理一个REST资源,它接收一个键和数据(值)。。。我希望变得健壮,这样数据可以是任何东西。它的范围可以从字符串到文件 为了处理这个问题,我在文章的末尾使用了PUT-REST方法。没什么特别的,只是想把基本数据放进去。如果我发送的数据是一个字符串,它的工作没有问题 但是,如果我试图跨多个站点发送文件,则会出现以下错误:org.jboss.resteasy.spi.UnsupportedMediaTypeException:无法使用内容类型。这就是为什么这对我来说没有意义: 如果我将@Con

我正在处理一个REST资源,它接收一个键和数据(值)。。。我希望变得健壮,这样数据可以是任何东西。它的范围可以从字符串到文件

为了处理这个问题,我在文章的末尾使用了PUT-REST方法。没什么特别的,只是想把基本数据放进去。如果我发送的数据是一个字符串,它的工作没有问题

但是,如果我试图跨多个站点发送文件,则会出现以下错误:
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。