Spring boot 在SpringWebFlux中传递API/保留后端头

Spring boot 在SpringWebFlux中传递API/保留后端头,spring-boot,spring-webflux,spring-webclient,Spring Boot,Spring Webflux,Spring Webclient,我正在构建一个应用程序来调用后端,该后端使用mime类型响应进行响应 @Override public Mono<String> getDocument() { return webClient.get() .uri(path) .retrieve() .bodyToMono(String.class); } 下面是我的处理程序 public Mono<ServerResponse> get

我正在构建一个应用程序来调用后端,该后端使用mime类型响应进行响应

@Override
public Mono<String> getDocument() {
    return webClient.get()
            .uri(path)
            .retrieve()
            .bodyToMono(String.class);
}
下面是我的处理程序

public Mono<ServerResponse> getDocument(ServerRequest request) {
        return ServerResponse
                .ok()
                .contentType(MediaType.APPLICATION_PDF)
                .header("Content-Disposition", "attachment; filename=\"test.pdf\"")
                .body(BodyInserters.fromPublisher(documentService.getDocument(), String.class));
    }
公共Mono getDocument(服务器请求){ 返回服务器响应 .ok() .contentType(MediaType.APPLICATION\u PDF) .header(“内容处置”、“附件;文件名=\”test.pdf\“”) .body(BodyInserters.fromPublisher(documentService.getDocument(),String.class)); } 正如预期的那样,该文件将作为附件从API发送,但我不想硬编码内容类型头。我怎样才能做到这一点

使用处理程序代码更新:

public Mono<ServerResponse> getDocument(ServerRequest request) {
     return ServerResponse
            .ok()
            .contentType(MediaType.APPLICATION_JSON)
            .body(BodyInserters.fromPublisher(documentService.getDocument(), String.class));
}
公共Mono getDocument(服务器请求){ 返回服务器响应 .ok() .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromPublisher(documentService.getDocument(),String.class)); }
我能够通过从服务而不是正文返回ResponseEntity并使用它在处理程序中构造ServerResponse来解决问题

服务:

public Mono<ResponseEntity<String>> getDocument() {
    return webClient.get()
            .uri(path)
            .retrieve()
            .toEntity(String.class);
}
public Mono getDocument(){
返回webClient.get()
.uri(路径)
.retrieve()
.toEntity(String.class);
}
处理程序:

   public Mono<ServerResponse> getDocument(ServerRequest request) {
        return documentService
                .getDocument()
                .flatMap(r -> ServerResponse
                        .ok()
                        .headers(httpHeaders -> httpHeaders.addAll(r.getHeaders()))
                        .body(BodyInserters.fromValue(r.getBody()))
                );
    }
公共Mono getDocument(服务器请求){ 退货文件服务 .getDocument() .flatMap(r->ServerResponse .ok() .headers(httpHeaders->httpHeaders.addAll(r.getHeaders())) .body(BodyInserters.fromValue(r.getBody())) ); }
   public Mono<ServerResponse> getDocument(ServerRequest request) {
        return documentService
                .getDocument()
                .flatMap(r -> ServerResponse
                        .ok()
                        .headers(httpHeaders -> httpHeaders.addAll(r.getHeaders()))
                        .body(BodyInserters.fromValue(r.getBody()))
                );
    }