我们有需要发回 JSON 输出的 JAX RS 实现。但是响应大小是巨大的。并且客户端同步期望相同。因此我尝试使用 StreamingOutput ......但客户端并没有真正以块的形式获取数据。以下是示例片段:
streamingOutput = new StreamingOutput() {
@Override
public void write(OutputStream out) throws IOException, WebApplicationException {
JsonGenerator jsonGenerator = mapper.getFactory().createGenerator(out);
jsonGenerator.writeStartArray();
for(int i=0; i < 10; i++) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("Response_State", "Response State - " + i);
jsonGenerator.writeStringField("Response_Report", "Response Report - " + i);
jsonGenerator.writeStringField("Error_details", "Error Details - " + i);
jsonGenerator.writeEndObject();;
jsonGenerator.flush();
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
jsonGenerator.writeEndArray();
jsonGenerator.close();
}
};
return Response.status(200).entity(streamingOutput).build();
Run Code Online (Sandbox Code Playgroud)
HttpClient client = …Run Code Online (Sandbox Code Playgroud)