Не удается задать пользовательский заголовок диапазона содержимого в 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.