gpt4 book ai didi

spring - 使用 spring 5 WebFlux 框架解码 ByteArray

转载 作者:行者123 更新时间:2023-12-03 00:33:47 25 4
gpt4 key购买 nike

我正在尝试将新的 Spring WebFlux 框架与 kotlin 结合使用。我找不到这段代码(myService)的错误所在:

fun foo(): Flux<ByteArray> {
val client = WebClient.create("http://byte-array-service")
return client
.get()
.uri("/info")
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exchange()
.flatMapMany {
r -> r.bodyToFlux(ByteArray::class.java)
}
}

此方法返回 7893 字节的 Flux,我知道并非所有字节都是由 byte-array-service 发送的。如果我使用旧式休息模板一切都可以

fun foo(): Flux<ByteArray> {
val rt = RestTemplate()
rt.messageConverters.add(
ByteArrayHttpMessageConverter())
val headers = HttpHeaders()
headers.accept = listOf(MediaType.APPLICATION_OCTET_STREAM)

val entity = HttpEntity<String>(headers)
val r = rt.exchange("http://byte-array-service/info", HttpMethod.GET,entity, ByteArray::class.java)
return Flux.just(r.body)
}

它返回从 byte-array-service 发送的所有 274124 字节

这是我的消费者

fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> {

return Mono.from(myService
.foo()
.flatMap {
accepted().body(fromObject(it.size))
})
}

最佳答案

如果我正确理解你的问题,并且你只需要向前传递流量,这应该可行。我在自己的环境中进行了测试,读取所有字节没有任何问题。

获取字节:

fun foo(): Flux<ByteArray> =
WebClient.create("http://byte-array-service")
.get()
.uri("/info")
.accept(MediaType.APPLICATION_OCTET_STREAM)
.retrieve()
.bodyToFlux(ByteArray::class.java)

返回响应字节:

fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> =
ServerResponse.ok().body(foo())

关于spring - 使用 spring 5 WebFlux 框架解码 ByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44514263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com