[英]How to write a request body using a stream with the java 11 http client?
舊版 java http 客戶端使用URLConnection.getOutputStream
提供了一個OutputStream
。 例如,編寫 json 主體的工作方式如下:
final URLConnection urlConnection = ...;
try (OutputStreamWriter writer = new OutputStreamWriter(urlConnection.getOutputStream())) {
new Gson().toJson(someJsonObject, writer);
}
使用新的 java 11 http 客戶端流式寫入請求正文的等效方法是什么?
我發現的唯一選擇是將整個 output 寫入String
或byte[]
並使用BodyPublishers.ofString/ofByteArray
,但是對於較大的請求,這對我來說似乎效率很低。
您可以使用Methanol的WritableBodyPublisher
。 它允許您通過OutputStream
或WritableByteChannel
來 stream 請求正文。 當您編寫它時,發布者會在 memory 中緩沖正文。 如果您希望在寫入時發送它,您需要事先使用sendAsync
或在另一個線程中進行寫入。 這有點類似於URLConnection
的行為。
var publisher = WritableBodyPublisher.create();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.POST(publisher)
.build();
var responseAsync = client.sendAsync(request, BodyHandlers.ofString());
try (var writer = new OutputStreamWriter(publisher.outputStream())) {
new Gson().toJson(someJsonObject, writer);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.