J'utilise WebClient
et la coutume BodyExtractor
classe pour mon application printemps-bootComment lire correctement Flux <DataBuffer> et le convertir en un seul fluxEntrée
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();
}
code ci-dessus fonctionne avec une petite charge utile mais pas sur un gros problème, je pense que c'est parce que je ne lis que la valeur d'un flux avec next
et je ne sais pas comment combiner et lire tous dataBuffer
. Je suis nouveau dans le domaine des réacteurs, donc je ne fais pas beaucoup de trucs avec le flux/monophonique.
pourquoi écrivez-vous votre propre BodyExtractor? WebFlux supporte déjà Jaxb avec Jaxb2XmlDecoder. –
@BrianClozel dois-je configurer quelque chose pour que cela fonctionne? 'bodyToMono' ne semble pas ramasser mes pojo. –
Qu'est-ce que 'InputStreamCollector'? –