Playframework 在Play Framework 2.4.x中设置标题的优雅方式

Playframework 在Play Framework 2.4.x中设置标题的优雅方式,playframework,annotations,http-headers,playframework-2.0,Playframework,Annotations,Http Headers,Playframework 2.0,在Play Framework 2.4.X中,是否有更优雅的方法来设置内容范围、X-Content-Range和内容长度标题 public static Result stream(Long id) { byte[] data = Song.get(id).getData(); RangeWrapper range = new RangeWrapper(request().getHeader("Range"), data.length); Chunks<byte[

在Play Framework 2.4.X中,是否有更优雅的方法来设置
内容范围
X-Content-Range
内容长度
标题

public static Result stream(Long id) {
    byte[] data = Song.get(id).getData();
    RangeWrapper range = new RangeWrapper(request().getHeader("Range"), data.length);

    Chunks<byte[]> chunks = ByteChunks.whenReady(out -> {
        out.write(Arrays.copyOfRange(data, range.getFrom(), range.getTo()));
        out.close();
    });

    // Is there a way of saying @After(range.getFrom(), range.getTo(), range.getContentLength(), data.length)?
    response().setHeader("Content-Range", String.format("bytes %d-%d/%d", range.getFrom(), range.getTo(), data.length));
    response().setHeader("X-Content-Length", Integer.toString(range.getContentLength()));
    response().setHeader("Content-Length", Integer.toString(range.getContentLength()));

    return status(206, chunks);
}
公共静态结果流(长id){
字节[]数据=Song.get(id).getData();
RangeWrapper range=新的RangeWrapper(request().getHeader(“range”),data.length);
Chunks Chunks=ByteChunks.whenReady(out->{
write(Arrays.copyOfRange(data,range.getFrom(),range.getTo());
out.close();
});
//有没有一种说法是@After(range.getFrom(),range.getTo(),range.getContentLength(),data.length)?
response().setHeader(“内容范围”,String.format(“字节%d-%d/%d”,Range.getFrom(),Range.getTo(),data.length”);
response().setHeader(“X-Content-Length”,Integer.toString(range.getContentLength());
response().setHeader(“内容长度”,Integer.toString(range.getContentLength());
返回状态(206,块);
}

或者我被提出的解决方案困住了,因为你不能用
@with
@Before
@After
指定参数?

@Before
@After
注释在Play 1.x中可用,而它们在Play 2.x中不再存在,您还可以将@与一起使用,您可以将自己的类合并为控制器和/或操作的拦截器


无论如何,我看不出在每个操作中使用
setHeader(…)
方法有什么错,特别是当它们依赖于所需资源的属性时,比如在分块响应中。

除了将
setHeader(…)
方法放在实用程序方法中并从每个操作调用它以减少代码重复之外,您的解决方案没有多少改进(遗憾的是)

动作合成和全局截取都只适用于
@Before
类型的情况,尤其是如果您想从动作中传递变量,它们是毫无用处的