大きいデータをレスポンスに流すときに便利なStreamingOutputだが、適当に使うとロジックに入り込んで後々取り扱いずらくなる。
class SomeLogic {
public Consumer<OutputStream> execute() {
byte[] hogehoge;
return out -> out.write(hogehoge);
}
}
SomeLogic logic = new SomeLogic();
Consumer<OutputStream> output = logic.execute();
StreamingOutput streamingOutput = output::accept;
return Response.ok().entitiy(streamingOutput).build();
のように実装することにした。