Spring boot 在SpringWebFlux中传递API/保留后端头
我正在构建一个应用程序来调用后端,该后端使用mime类型响应进行响应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
@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()))
);
}