InputStream в Джерси REST возвращает только один байт - PullRequest
1 голос
/ 13 марта 2012

Я добавляю новую функцию на сервер, который использует джерси REST. Я хочу разместить данные в двоичном виде. Я просто добавил:

@POST
@Path('/mypath')
public void Foo(@QueryParam("var"), InputStream is) {
    int data[8];
    data[0] = is.read();
    data[1] = is.read();
}    

Затем я запускаю следующую команду:

cat test.bin | curl -X POST -H 'Content-type:image/jpeg' -d @- http://localhost:8080/path/mypath?var=ok

Когда я прохожу отладчик, первый байт действительно является первым байтом test.bin. Однако при втором чтении возвращается -1, что указывает на то, что в потоке больше нет данных. Я неправильно использую curl? Есть какие-то другие настройки для провайдера, которые мне нужно сделать? Другие параметры конфигурации? Кажется, мне не нужно @Consumes("*/*"), потому что он должен делать это по умолчанию.

1 Ответ

3 голосов
/ 13 марта 2012

Согласно документации, возможно, вам следует использовать --data-binary вместо -d (это псевдоним для --data-ascii) для строго двоичных данных.

Кроме того, вместо использования cat,вы можете использовать только @test.bin для включения файла.

Использование параметра curl -vv также помогает показать, что он на самом деле отправляется.Он не показывает данные, но, по крайней мере, показывает Content-Length, отправленный curl.

...