我正在使用Spring WebFlux开发一个API REST,但在上传文件时遇到了问题。它们被存储了,但我没有得到预期的返回值。
我就是这么做的:
@PostMapping(value = "/muscles/{id}/image")
public Flux<String> updateImage(@PathVariable("id") String id, @RequestBody Flux<Part> file) {
log.info("REST request to update image to Muscle");
return storageService.saveFiles(file);
}
存储服务
public Flux<String> saveFiles(Flux<Part> parts) {
log.info("StorageService.saveFiles({})", parts);
return
parts
.filter(p -> p instanceof FilePart)
.cast(FilePart.class)
.flatMap(file -> saveFile(file));
}
private Mono<String> saveFile(FilePart filePart) {
log.info("StorageService.saveFile({})", filePart);
String filename = DigestUtils.sha256Hex(filePart.filename() + new Date());
Path target = rootLocation.resolve(filename);
try {
Files.deleteIfExists(target);
File file = Files.createFile(target).toFile();
return filePart.transferTo(file)
.map(r -> filename);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
filepart.transferTo()
返回mono
,它在操作完成时发出信号-这意味着反应型发布服务器
将只发布oncomplete
/onerror
信号,而在此之前永远不会发布值。
这意味着map
操作从未执行过,因为它只是源发布的给定元素。
您可以返回文件的名称,仍然可以使用链式反应运算符,如下所示:
return part.transferTo(file).thenReturn(part.filename());
我有一个函数返回,我想将它映射到(因为这是我在控制器方法中返回的东西)。 是否有更好的方法返回而不是? 我不能使用,因为映射函数不能接受s。
我对Spring WebFlux和反应编程比较陌生,所以请原谅我的问题是它没有任何意义。 基本上,我想要实现的是用“getRandomPlanetName()”返回一个新行星的名称,同时在Delay对象中设置一个字段“delayElement”。类似这样的事情: 还有,我是否可能只返回一个字符串,它是getPlanetName()的结果,而不是一个对象的单声道?
这是一段代码 这将向控制台提供以下结果: 这意味着第一个中的链被识别为空链。 另一方面,Reactor具有以下类MonoEmpty,该类由Mono返回。empty()方法。除此之外,该方法还包括以下内容: 没有发出任何项,但我用方法发出了类型化对象。 对此有何解释?
我的项目中有一个非常简单的SpringWebFlux restendpoint。 endpoint只需使用提供的用户名回复即可。 我面临的问题是响应体是空的,应该是用户名,我还验证了当我返回硬编码字符串时,它通过了,当我依赖
问题内容: 在非官方指南中有一个占位符答案,带有指向(对我而言)似乎无关的文章的链接。 我使用XJC生成我的JAXB类,尽管它们大多数按预期相互映射,但有些元素被映射到。这对于带有循环的图最令人讨厌,其中有时Foo元素的父节点将是,而它本身没有父属性,从而中断了循环。 我可以想到各种解决方法,但是如果有人可以向我解释这种行为,那就更好了。为什么JAXB有时将元素映射到而不是Foo? 问题答案: 在