将 Mono 字段映射到链方法
Map a Mono field to a chain method
总的来说,我对 Spring WebFlux 和 Reactive 编程比较陌生,所以请原谅我的问题,因为它没有任何意义。
我有一个简单的@PostMapping 方法,我试图将 Mono 中的一个字段映射到另一个链方法:
@PostMapping
public Mono<Delay> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody
.map(p -> new Delay(p.getDelayTime(), getRandomPlanetName()))
.delayElement(Duration.ofMillis(50));
}
public String getRandomPlanetName() {
Random rand = new Random();
List<String> list = Stream.of(
"Mercury",
"Neptune")
.collect(Collectors.toList());
return list.get(rand.nextInt(list.size()));
}
基本上我想要实现的是 return 一个新的 Planet 名称 "getRandomPlanetName()",同时在 Delay 对象中设置一个带有字段的 "delayElement"。像这样:
@PostMapping
public Mono<Delay> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody
.map(p -> new Delay(p.getDelayTime(), getRandomPlanetName()))
.delayElement(Duration.ofMillis(delayBody.getDelayTime));
}
此外,我是否可以 return 只是一个字符串,它是 getPlanetName() 的结果而不是对象的 Mono?
基本上这会查看 Mono<Delay>
的延迟时间,并用此 delayElement(delayTime)
创建另一个 Mono
。
@PostMapping
public Mono<String> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody.flatMap(p -> {
return Mono.just(getRandomPlanetName())
.delayElement(Duration.ofMillis(p.getDelayTime()));
});
}
private String getRandomPlanetName() {
Random rand = new Random();
List<String> list = Arrays.asList("Mercury", "Neptune");
return list.get(rand.nextInt(list.size()));
}
为了更好的人类可读性,我放在 {} 中,您也可以这样写:
@PostMapping
public Mono<String> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody.flatMap(p -> Mono.just(getRandomPlanetName()).delayElement(Duration.ofMillis(p.getDelayTime())));
}
总的来说,我对 Spring WebFlux 和 Reactive 编程比较陌生,所以请原谅我的问题,因为它没有任何意义。
我有一个简单的@PostMapping 方法,我试图将 Mono 中的一个字段映射到另一个链方法:
@PostMapping
public Mono<Delay> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody
.map(p -> new Delay(p.getDelayTime(), getRandomPlanetName()))
.delayElement(Duration.ofMillis(50));
}
public String getRandomPlanetName() {
Random rand = new Random();
List<String> list = Stream.of(
"Mercury",
"Neptune")
.collect(Collectors.toList());
return list.get(rand.nextInt(list.size()));
}
基本上我想要实现的是 return 一个新的 Planet 名称 "getRandomPlanetName()",同时在 Delay 对象中设置一个带有字段的 "delayElement"。像这样:
@PostMapping
public Mono<Delay> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody
.map(p -> new Delay(p.getDelayTime(), getRandomPlanetName()))
.delayElement(Duration.ofMillis(delayBody.getDelayTime));
}
此外,我是否可以 return 只是一个字符串,它是 getPlanetName() 的结果而不是对象的 Mono?
基本上这会查看 Mono<Delay>
的延迟时间,并用此 delayElement(delayTime)
创建另一个 Mono
。
@PostMapping
public Mono<String> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody.flatMap(p -> {
return Mono.just(getRandomPlanetName())
.delayElement(Duration.ofMillis(p.getDelayTime()));
});
}
private String getRandomPlanetName() {
Random rand = new Random();
List<String> list = Arrays.asList("Mercury", "Neptune");
return list.get(rand.nextInt(list.size()));
}
为了更好的人类可读性,我放在 {} 中,您也可以这样写:
@PostMapping
public Mono<String> getPlanetNames(@RequestBody Mono<Delay> delayBody) {
return delayBody.flatMap(p -> Mono.just(getRandomPlanetName()).delayElement(Duration.ofMillis(p.getDelayTime())));
}