在Restlet中设置自定义Content-Range标头以在Dojo分页中使用失败

时间:2015-08-17 10:22:55

标签: java dojo http-headers restlet http-content-range

阅读以下帖子后:

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中阻止手动更改,导致:"警告:不允许添加标准标题[...] ..."警告。

1 个答案:

答案 0 :(得分:0)

支持将在Restlet Framework的未来2.3.8版本中添加。