我有一个场景,我想在实现和尝试不同的解决方案之前获得更广泛的意见。流媒体REST响应与坐落流
我正在执行的REST服务将提供包含多个二进制数据字段和简单字符串的模型。一个简单的方法就是实现包含我的String,byte []字段的POJOS等。然后,Jackson将使用base64将其序列化。小菜一碟。
但我想为此服务作为一个流。二进制字段将非常庞大,并且已经作为从我的服务中的另一个外部资源传入的流进行处理。因此,将它们读入字节数组,然后让jackson将它们转换为base64将会带来不可接受的性能影响。
也许我可以简单地在我的POJO中有OutputStream对象。这是否会让杰克逊流过它(而编码为base64),还是只是首先读取整个流?也许杰克逊根本不支持这个?
另一种选择可能是使用多部分响应,但不确定Jersey是否也不会缓冲它?
或者唯一的方法是使用某种自定义杰克逊串行器? 我可以使用StreamingOutput来执行此操作吗?
如果它只是一个blob,我会简单地将它作为一个八位字节流返回并且很高兴,但正如前面提到的,我有一个包含几个二进制和非二进制字段的数据模型,我真的很想将它全部返回在一个电话。
那么你说什么?什么是最简单/最好的方式来实现我的目标?