[英]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.