簡體   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