2014-11-24 3 views
0

Я работаю над ресурсом REST, который использует ключ и данные (значение) ... Я хотел бы быть надежным, чтобы эти данные могли быть чем угодно. Он может варьироваться от строки до файла.RESTEasy: Нельзя использовать тип контента - даже с правильными @Consumes

Чтобы справиться с этим, у меня есть метод PUT REST, который находится в конце сообщения. Ничего необычного, просто пытаюсь установить базовые данные. Если я отправляю данные, которые являются строкой, это не проблема.

Если, однако, если я пытаюсь отправить файл через, я получаю эту ошибку: 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 исключение. Я понятия не имею, что бы это вызвало. Я использую расширение Advanced Rest Client для Chrome, чтобы отправить мой запрос, и выглядит примерно так: 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

A 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-- 
+0

Интересно, спасибо. Есть ли причина, по которой я не могу использовать '@ Consumes'' application/octet-stream'? Я не могу понять, почему я получаю исключение «не могу потреблять контент», если оно должно совпадать. – joshft91

+0

Это не соответствует. Вы отправляете 'multipart/form-data', и это должно потребляться вашим классом ресурсов. 'application/octet-stream' - это только одна часть. – lefloh

+0

Можно ли отправить 'application/octet-stream', который также может быть использован моим ресурсом как таковым? – joshft91

Смежные вопросы