I WebClient
und benutzerdefinierten BodyExtractor
Klasse für meine Feder-Boot-AnwendungWie lesen richtig Flux <DataBuffer> und es zu einem einzelnen input konvertieren
WebClient webLCient = WebClient.create();
webClient.get()
.uri(url, params)
.accept(MediaType.APPLICATION.XML)
.exchange()
.flatMap(response -> {
return response.body(new BodyExtractor());
})
BodyExtractor.java
@Override
public Mono<T> extract(ClientHttpResponse response, BodyExtractor.Context context) {
Flux<DataBuffer> body = response.getBody();
body.map(dataBuffer -> {
try {
JaxBContext jc = JaxBContext.newInstance(SomeClass.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (T) unmarshaller.unmarshal(dataBuffer.asInputStream())
} catch(Exception e){
return null;
}
}).next();
}
Above Code bin mit funktioniert mit geringer Nutzlast, aber nicht auf ein großes Problem, ich denke es liegt daran, dass ich nur einen einzigen Fluss Wert mit next
lesen und ich bin mir nicht sicher, wie zu kombinieren und alle dataBuffer
lesen.
Ich bin neu in Reaktor, so dass ich nicht viele Tricks mit Flussmittel/Mono.
Warum schreiben Sie Ihren eigenen BodyExtractor? WebFlux unterstützt Jaxb bereits mit Jaxb2XmlDecoder. –
@BrianClozel muss ich etwas konfigurieren, damit es funktioniert? 'bodyToMono' scheint meine Pojo's nicht aufzunehmen. –
Was ist 'InputStreamCollector'? –