私はそれを行う方法が見つからなかった、ストリームは常に閉じている。コントローラで、その後
public class StreamResourceReader implements ResourceReader {
private HttpServletResponse response;
public StreamResourceReader(HttpServletResponse response) {
this.response = response;
}
@Override
public void read(InputStream content) {
try {
IOUtils.copy(content, response.getOutputStream());
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
}
::次の実装と
public interface ResourceReader {
void read(InputStream content);
}
:回避策として、私は次のコードを作成し、残りのテンプレートに
@RequestMapping(value = "document/{objectId}")
public void getDocumentContent(@PathVariable String objectId, HttpServletResponse response) {
ResourceReader reader = new StreamResourceReader(response);
service.readDocumentContent(objectId, reader);
}
はコール:
restTemplate.execute(uri, HttpMethod.GET, null,
new StreamResponseExtractor(reader));
と文字列rエスカレーション抽出プログラム:
@Override
public ResponseEntity extractData(ClientHttpResponse response) throws IOException {
reader.read(response.getBody());
return null;
}
これは魅力的です。 :)
これで、ファイル全体がメモリにロードされませんか? –
はい、メモリにファイル全体がある必要はありません。処理中にファイル全体が読み込まれますが、あまりメモリが必要ありません – zibi
私は同じことに従っています。私はinputStreamが切り捨てられているのを見ています。 https://stackoverflow.com/questions/46332692/response-body-from-resttemplate-is-getting-truncated-when-downloading-a-file –