首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring5 WebFlux框架解码ByteArray

使用Spring5 WebFlux框架解码ByteArray
EN

Stack Overflow用户
提问于 2017-06-13 14:51:37
回答 1查看 3.3K关注 0票数 3

我正在尝试使用新的Spring框架。我找不到这段代码(MyService)的错误之处:

代码语言:javascript
复制
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并没有发送所有的字节。如果我使用老式的rest模板,一切都没问题

代码语言:javascript
复制
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个字节

这是我的客户

代码语言:javascript
复制
fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> {

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

回答 1

Stack Overflow用户

发布于 2018-02-07 22:43:47

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

获取字节数的步骤:

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

返回带有响应的字节数:

代码语言:javascript
复制
fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> =
        ServerResponse.ok().body(foo())  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44514263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档