我正在尝试转换
Flux
为了使用Json API规范进行确认,我有一个标准方法,用于转换
POJO
并以字符串形式返回json。这与
Mono
.
然而,我无法训练如何使用
通量
.
@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));
}
“全部查找”得到所有
FeedItem
来自反应性mongo数据库。然后我就糊涂了。使用
flatMap
我可以一次处理每个项目并将其转换为字符串(使用下面的方法确认符合规范),但这不起作用,因为每个项目都是独立处理的,这意味着返回无效的Json(否
,
各项目之间)。
是否有其他方法可以修改来自Spring控制器的传出数据?
编辑:
我知道我可以用
public Mono<String> findAll() {
List<FeedItem> feedItems = feedItemRepository.findAll().collectList().block();
return writeList(feedItems);
}
但我相信这是一个可怕的想法
block()
就像那样。