【问题标题】:Can not bind to Mono<String> via @PathVariable?无法通过 @PathVariable 绑定到 Mono<String>?
【发布时间】:2017-07-20 07:35:01
【问题描述】:

我正在使用 Spring Boot 2.0.0.M2 遵循 Simon Basle 的“Reactor by Example”中的代码。它就像一个魅力。但是,当我尝试将路径变量绑定到 Mono 并发送请求 http://localhost:8080/monohello/Hero 时,它的响应如下:

{ “时间戳”:1500534277626, “状态”:500, "error": "内部服务器错误", “消息”:“无法将“java.lang.String”类型的值转换为所需的“reactor.core.publisher.Mono”类型;嵌套异常是 java.lang.IllegalStateException:无法转换“java.lang”类型的值。字符串'到所需类型'reactor.core.publisher.Mono':没有找到匹配的编辑器或转换策略”, "路径": "/monohello/Hero" }

下面是控制器:

@RestController public class ExampleController {

@GetMapping("hello/{who}")
public Mono<String> hello(@PathVariable String who) {
    return Mono.just(who).map(w -> "Hello " + w + "!");
}

@GetMapping("monohello/{who}")
public Mono<String> monoHello(@PathVariable Mono<String> who) {
    return who.map(w -> "Hello " + w + "!");
}}

【问题讨论】:

  • 你试过前任:@GetMapping("/monohello/{who}") , method=RequestMethod.GET @GetMapping("/monohello/{who}") , method=RequestMethod.POST
  • 谢谢。试过了,还是一样的错误响应。
  • 接受 Mono 作为方法参数真的有意义吗?您需要注册一个可以转换 Sting -> Mono. 的转换器

标签: java spring spring-mvc project-reactor spring-webflux


【解决方案1】:

您收到此错误的原因是 spring 找不到已注册的Converter&lt;String,Mono&lt;String&gt;&gt;。我不确定这实际上是您想要做的事情。在方法中创建 Mono 可能是最简单的。在这种情况下,使用转换器不会获得太多收益。事实上,您主要只是失去了如何创建 Mono 的灵活性。

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert

【讨论】:

  • 谢谢!注册转换器后,一切都变得很酷。但正如你所说,这没有意义。我只是想也许 spring-webflux 已经为我们实现了这些功能,不仅是转换器,还有 json 反序列化器,即@RequestBody Mono
猜你喜欢
  • 2017-03-07
  • 2020-07-18
  • 2016-01-12
  • 2011-05-24
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 2021-12-10
  • 2013-11-02
相关资源
最近更新 更多