Не удается задать пользовательский заголовок диапазона содержимого в Restlet для использования в разбиении на страницы Dojo

Прочитав следующую ветку:

Установка пользовательского заголовка диапазона содержимого с помощью Restlet

Я попытался установить пользовательское имя устройства в диапазоне для объекта. Это не решает проблему.

final Range range = new Range();
  range.setUnitName("items");
  range.setIndex(0);
  range.setSize(20);

[...]

getResponseEntity().setRange(range);
getResponseEntity().setSize(100);

Ответ теперь содержит следующие заголовки:

Content-Range:"items 0-19/100"

Но Restlet также читает range.size (в нашем случае 20) и автоматически помещает его в Content-Length. Что приводит к:

Content-Length:"20"

Это приводит к тому, что клиент (например, браузер прекращает чтение после 20 байт. (Это также вызывает исключение нулевого указателя на сервере, поскольку выходной поток неожиданно закрывается).

Официальная документация рестлета: http://restlet.com/technical-resources/restlet-framework/guide/2.3/core/http-headers-mapping

говорит, что Content-Length доступен как message.entity.size, но для достижения желаемой строки в Content-Range необходимо установить значение 100. Мне это кажется ошибкой, так как range.size используется для вычисления длины содержимого, а не размера объекта.

Я не могу установить Content-Length вручную, так как это также стандартный заголовок, и любые ручные изменения в стандартных заголовках принимаются.

"Исправление", предложенное в упомянутой теме, изменяет только имя юнита, а не реальный юнит указанного диапазона. Это все еще интерпретируется как байты как непригодные как таковые.

Использование значений в Range дважды - для содержимого-диапазона, а также для содержимого - кажется проблемой.

Есть ли новый способ переопределить заголовки вручную или сделать их совместимыми с dojo?

Ручные изменения блокируются в HeaderUtils, вызываемом ServerAdapter, вызывая предупреждение: "ПРЕДУПРЕЖДЕНИЕ: добавление стандартного заголовка [...] не разрешено...".

1 ответ

Поддержка будет добавлена ​​в будущем выпуске 2.3.8 Restlet Framework.

Другие вопросы по тегам