如何在Spring Webflux中返回Mono <Map <String,Flux <Integer >>>响应?

katiex7

所以现在,我返回的响应看起来像

    @GetMapping("/integers")
    @ResponseStatus(code = HttpStatus.OK)
    public Mono<Map<String, Flux<Integer>>> getIntegers() {
        Mono<Map<String, Flux<Integer>>> integers = 
               Mono.just(Map.of("Integers", integerService.getIntegers()));
        return integers;
    }

这给了我一个回应

{"Integers":{"scanAvailable":true,"prefetch":-1}}

我希望它也可以流式传输该Flux<Integer>部分,但事实并非如此。我将如何在Spring webflux中做到这一点?

布赖恩·克洛泽尔

Spring WebFlux只能处理一种反应类型,而不能处理嵌套的反应类型(如Mono<Flux<Integer>>)。您的控制器方法可以返回a Mono<Something>,a Flux<Something>,a ResponseEntity<Mono<Something>>,aMono<ResponseEntity<Something>>等等-但永远不会嵌套反应类型。

您在响应中看到的奇怪数据是杰克逊实际上试图序列化反应式类型(因此,您正在查看数据的承诺,而不是数据本身)。

在这种情况下,您可以这样重写方法:

@GetMapping("/integers")
@ResponseStatus(code = HttpStatus.OK)
public Mono<Map<String, Flux<Integer>>> getIntegers() {
    Flux<Integer> integers = integerService.getIntegers();
    Mono<Map<String, List<Integer>>> result = integers
            // this will buffer and collect all integers in a Mono<List<Integer>>
            .collectList()
            // we can then map that and wrap it into a Map
            .map(list -> Collections.singletonMap("Integers", list));
    return result;
}

您可以在Spring WebFlux参考文档中阅读有关受支持的返回值的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 Java 8 中创建 Map<Integer, Map<String, Integer>> 类型的映射?

如何将Mono <Map <String,Optional <String >>>>>转换为Flux <Tuple <String,Optional <String >>>>>

HATEOAS关于Spring Flux / Mono的响应

在Spring Webflux中的Mono <Response <T >>中转换Flux <T>

Map<Integer,Integer> 类型中的 put(Integer, Integer) 方法不适用于参数 (String, Integer)

如何在Spring WebFlux中记录请求和响应正文

如何使用 Spring Webflux 返回 GZIP 响应?

如何使用Spring WebClient get从端点接收Map <String,Integer>?

使用Spring Webflux时在后台运行Mono并返回响应

如何在javascript中的json响应上使用map函数?

如何在颤动中更改为对 Map 的响应类型

如何在响应实体中包装Flux <MyObject>

如何填充这个 HashMap Map<Integer, Map<String, Boolean>> pr

使用Java 8流,如何将Map <String,Map <String,List <Person >>>转换为Map <Integer,Map <String,Integer >>?

在Spring Webflux中捕获响应

使用Flux <String>作为响应时的Spring WebFluxTest奇怪的行为

如何将 Map<String, List<Integer>> 更改为 Map<String, Integer>

如何在Spring中包装JSON响应

如何在Spring RestTemplate中记录响应?

如何在Spring中修改响应的ReadOnlyHttpHeaders?

我应该如何在 Spring 中返回响应实体

WebFlux-如何检查Mono <ResponseEntity <Flux <MyItem >>>是否为空以返回404

如何使用 Stream API 将字符串列表中的数据转换为 Map<String, Integer>?

使用Spring Reactor和Spring Boot时如何返回Flux作为响应?

如何在Java 8中将Map <Shape,int []>转换为Map <Shape,Set <Integer >>?

如何在颤振中将响应映射到 Map<String, Object>

如何在 Spring webflux 中以字符串形式获取原始响应?

如何为Map <String,Integer>定义JSON模式?

如何使用 gson 序列化 Map<String, List<Integer>>?