阅读以下帖子后:
Setting a custom Content-Range Header using 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"
这会导致客户端(例如浏览器在20Bytes之后停止读取。(这也会导致服务器上出现空指针异常,因为输出流意外关闭。)
正式的Restlet文档:http://restlet.com/technical-resources/restlet-framework/guide/2.3/core/http-headers-mapping
表示Content-Length可用作message.entity.size,但需要将其设置为100才能在Content-Range中获得所需的String。这看起来像是一个错误,因为range.size用于计算内容长度,而不是实体大小。
我无法手动设置内容长度,因为这也是标准标题,并且对标准标题的任何手动更改都会被加入。
"修复"在提到的线程中提出,只更改指定范围的Unitname - 而不是实际单位。它仍被解释为字节,因为它不可用。
使用Range中的值两次 - 对于内容范围以及内容 - legth似乎是问题。
是否有任何新方法可以手动覆盖标题,或使其与dojo兼容?
在ServerAdapter调用的HeaderUtils中阻止手动更改,导致:"警告:不允许添加标准标题[...] ..."警告。
答案 0 :(得分:0)
支持将在Restlet Framework的未来2.3.8版本中添加。