मैं एक कोडबेस में स्प्रिंग 5 (5.0.0.आरसी 2) से नया WebClient
कोशिश कर रहा हूं जो प्रतिक्रियाशील प्रोग्रामिंग का उपयोग करता है और मैंने अपने ऐप में एक एंडपॉइंट से डीटीओ तक JSON प्रतिक्रिया मैपिंग सफलता प्राप्त की है, जो बहुत काम करता है अच्छा:स्प्रिंग वेब क्लाइंट से क्लाइंट रीस्पॉन्स से बाइट सरणी कैसे प्राप्त करें?
WebClient client = WebClient.create(baseURI);
Mono<DTO> dto = client.get()
.uri(uri)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.flatMap(response -> response.bodyToMono(DTO.class));
हालांकि, अब मैं एक अंतिम बिंदु जो प्रोटोकॉल बफ़र (बाइनरी डेटा application/octet-stream
के रूप में सेवा) का उपयोग करता है से प्रतिक्रिया शरीर के लिए कोशिश कर रहा हूँ, इसलिए मैं प्रतिक्रिया, से कच्चे बाइट्स प्राप्त करना चाहते हैं जो मैं फिर एक ऑब्जेक्ट को मैप कर दूंगा।
मैं इसे इस गूगल अमरूद से Bytes
का उपयोग कर की तरह काम करने के लिए मिल गया:
Mono<byte[]> bytes = client.get()
.uri(uri)
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exchange()
.flatMapMany(response -> response.body(BodyExtractors.toDataBuffers()))
.map(dataBuffer -> {
ByteBuffer byteBuffer = dataBuffer.asByteBuffer();
byte[] byteArray = new byte[byteBuffer.remaining()];
byteBuffer.get(byteArray, 0, bytes.length);
return byteArray;
})
.reduce(Bytes::concat)
यह काम करता है, लेकिन वहाँ एक आसान, और अधिक सुरुचिपूर्ण इन बाइट्स प्राप्त करने के लिए तरीका है?