繁体   English   中英

如何使用Spring Reactive修改助焊剂的结果

[英]How to modify results from a Flux with Spring Reactive

我正在尝试转换Flux的结果以通过Json API规范进行确认。 我有我的标准方法,可以将POJO转换为正确的格式,并以字符串形式返回json。 这与Mono完美配合。

但是我无法锻炼如何用Flux处理。

@GetMapping(value = "/", produces = "application/vnd.api+json")
@ResponseBody
public Flux<String> findAll() {
    return feedItemRepository.findAll().flatMap(this::createJsonApiSpec);
}

private Mono<String> createJsonApiSpec(FeedItem item) {
    ObjectMapper objectMapper = new ObjectMapper();
    ResourceConverter resourceConverter = new ResourceConverter(objectMapper, FeedItem.class);

    JSONAPIDocument<Object> document = new JSONAPIDocument<>(item);

    byte[] bytes = new byte[0];
    try {
        bytes = resourceConverter.writeDocument(document);
    } catch (DocumentSerializationException e) {
        e.printStackTrace();
    }

    return Mono.justOrEmpty(new String(bytes));
}

find all从反应式mongo数据库获取所有FeedItem 然后我很困惑。 使用flatMap我可以一次处理每个项目并将其转换为String(使用以下方法确认符合规范),但这不起作用,因为每个项目都是独立处理的,这意味着返回了无效的Json(否,每个项目之间)。

还有另一种方法来修改来自Spring控制器的传出数据吗?

编辑:我知道我可以使用

public Mono<String> findAll() {
    List<FeedItem> feedItems = feedItemRepository.findAll().collectList().block();

    return writeList(feedItems);
}

但是我敢肯定,像这样使用block()是一个糟糕的主意。

返回Mono<FeedItem>给您什么? 只是一个指针:如果FeedItem是json pojo,则应该能够返回它。 无需以编程方式进行json编组/解组,该框架将为您完成。

就像这里: https : //dzone.com/articles/spring-webflux-first-steps和许多其他示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM