我想使用反应性编程将我的excel文件存储到我的数据库中。在非反应式中,这很容易做到,但我不能在反应式中做类似的事情,我应该写什么来存储它到我的mongo数据库中?
@PostMapping(path = "/file",consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public HttpStatus file(@RequestPart("files") Mono<FilePart> file) {
return Service.save(excel);
}
public HttpStatus save(Mono<FilePart> filePartMono) {
//what to do here to save my file into database
}
@Collection("data")
public class Excel {
@Id
int id;
private byte[] file;
}
在使用反应式编程时,您实际上应该使用mono
和flux
,这样您的应用程序才真正是反应式的。这样做的结果是,您必须将服务和控制器方法的返回类型更改为返回mono
。您的完整应用程序应该是反应式的(从REST API到数据库),这样您就可以充分受益于反应式堆栈。
@PostMapping(path = "/file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,
produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Mono<HttpStatus> file(@RequestPart("files") Mono<FilePart> file) {
return Service.save(excel);
}
在您的服务中,您可以执行以下操作:
public Mono<HttpStatus> save(Mono<FilePart> filePartMono) {
return filePartMono.flatMap { filePart -> // you need flatMap assuming your mongo repository also returns a Mono
byte[] bytes = // convertion to byte[]
// save it to the database
}.map { mongoRepositoryResponse ->
// depending on the response from mongo repository you compute HttpStatus
}
}
更新: 一点我想要实现的内容。我有两个服务--一个通过Http返回me,另一个通过Redis返回。对于这两种情况,我有完全相同的功能-10-15个操作符链,我想要实现的是避免重复代码。 例如:
如何将flux 转换为mono 对象?
首先,我是SpringWebFlux的新手,正在尝试建立一个反应式spring启动项目的POC。我有一个用例,需要将检索到的实体类(PartyDTO)转换为Mono对象(Person:这是一个没有构造函数的第三方业务对象,我无法修改它)。我在谷歌上搜索,但找不到与我的用例相匹配的答案。 第三方对象: 我的课程如下: 调用我的存储库的服务类。 如上图所示,我尝试将平面图与我的自定义映射器一起使用,但
我有一节这样的课 并从外部API向webclient获取数据 我想把数据转换成下面这样。 这是我的尝试 我的方法似乎是同步的。
我的数据库正在返回Flux,我需要将其转换为Mono 如果调用方方法的返回类型只有Mono,我可以很容易地将其映射如下,但由于它是Mono //期望将水果的流量转换为水果列表的单声道并返回给调用者 }
问题内容: 我有一个表示RGB图像的整数数组,想将其转换为字节数组并将其保存到文件中。 在Java中将整数数组转换为字节数组的最佳方法是什么? 问题答案: 正如Brian所说,您需要确定需要什么样的转换。 您是否要将其保存为“正常”图像文件(jpg,png等)? 如果是这样,您可能应该使用Java Image I / O API。 如果要以“原始”格式保存,则必须指定写入字节的顺序,然后使用和NI