当前位置: 首页 > 知识库问答 >
问题:

Spring WebClient解码自定义应用程序/多部分相关,应用程序/dicom(Wado-RS)

隆钊
2023-03-14

我正在尝试解码一个与多部分相关的请求,它只是一个简单的多文件下载,但具有特定的内容类型(应用程序/dicom,而不是应用程序/八位字节流)。由于响应主体的结构可能是相同的,所以我可以告诉“多部分编解码器”将该内容类型视为八位字节流。

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

我该怎么做?

共有2个答案

彭阳朔
2023-03-14

这就是我所做的,让它发挥作用。我直接使用DefaultPartHttpMessageReader类来干净地完成它(spring 5.3)。

public Flux<Part> getDicoms(String wadoUri) {
    final var partReader = new DefaultPartHttpMessageReader();
    partReader.setStreaming(true);
    return WebClient.builder()
            .build()
            .get()
            .uri(wadoUri)
            .accept(MediaType.ALL)
            //.attributes(clientRegistrationId("keycloak"))
            .exchange()
            .flatMapMany(clientResponse -> {
                var message = new ReactiveHttpInputMessage() {
                    @Override
                    public Flux<DataBuffer> getBody() {
                        return clientResponse.bodyToFlux(DataBuffer.class);
                    }

                    @Override
                    public HttpHeaders getHeaders() {
                        return clientResponse.headers().asHttpHeaders();
                    }
                };
                return partReader.read(ResolvableType.forType(DataBuffer.class), message, Map.of());

            });
}
叶弘深
2023-03-14

读取多部分响应的更简单方法:

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())))
 类似资料:
  • 我正在使用带有Content-Type: Application/dicom的WADO-RS。成功执行请求后,我得到了一个字节流,其中包含一些头信息和Multipart格式的DICOM数据。如何使用C代码从中解析实际的DICOM数据?

  • a.cs文件: 公共活动MyEventHandler Ontagload; 私有void btnLoad_Click(object sender,EventArgs e){if(OnTagLoad!=null){OnTagLoad(sender,e,runTimeData);}} 每当我单击Load按钮时,事件应该只触发一次。我们如何在windows窗体中实现这一点。 感谢你的帮助。

  • 所以我现在正在做一个需要数字拾取器的应用程序。我已经创建了数字拾取器使用一个按钮textview+按钮布局。t选择器可以正常工作,但当您删除数字并尝试按下任何按钮时,此时应用程序会崩溃。

  • Requirements 运行一个Spark Streaming应用程序,有下面一些步骤 有管理器的集群-这是任何Spark应用程序都需要的需求,详见部署指南 将应用程序打为jar包-你必须编译你的应用程序为jar包。如果你用spark-submit启动应用程序,你不需要将Spark和Spark Streaming打包进这个jar包。 如果你的应用程序用到了高级源(如kafka,flume),你需

  • 问题内容: 我正在编写一个Swing应用程序,该应用程序需要充当浏览器中的applet或独立应用程序,即它可以包含在JFrame或JApplet中。 在这种情况下,我想向用户显示一个自定义模式对话框(即,一个具有自定义布局和逻辑的复杂对话框,而不仅仅是简单的JOptionPane提示之一)。如果对话框是完全包含在应用程序窗口中的轻量级组件,那就很好。 同时,应用程序中将发生后台处理(网络线程,动画

  • 我运行< code>heroku open时出现应用程序错误。我查了日志,这是: 2016-06-19T05:22:44.640391 00:00 heroku[路由器]:at=错误代码=H10 desc=“应用程序崩溃”方法=获取路径=“/”主机=drawparty-.herokuapp。com request_id=6712804b-95f9-49ce-92a5-7f45df7bb79e fw