javaspring-webfluxdicomweb

Spring Webclient decode custom application/multipart-related,application/dicom (Wado-RS)


I'm trying to decode a multipart-related request that is just a simple multi files download but with a specific content type by part (application/dicom and not application/octet-stream). Since the structure of the response body might be identical, I could just tell the "multipart codec" to treat that content type as an octet-stream.

public Flux<FilePart> getDicoms(String seriesUri) {
    return webClient.get()
            .uri(seriesUri)
            .accept(MediaType.ALL)
            .retrieve()
            .bodyToFlux(FilePart.class);
}

How can I do that?


Solution

  • An easier way of reading a multipart response:

    private Mono<ResponseEntity<Flux<Part>>> queryForFiles(String uri)
        final var partReader = new DefaultPartHttpMessageReader();
        partReader.setStreaming(true);
        
        return WebClient.builder()
                .build()
                .get()
                .uri(wadoUri)
                .accept(MediaType.ALL)
                .retrieve()
                .toEntityFlux((inputMessage, context) -> partReader.read(ResolvableType.forType(DataBuffer.class), inputMessage, Map.of())))