Webflux Reactive objects not resolved before rendering Thymeleaf View(在渲染百里叶视图之前未解析Webflow反应对象)
问题描述
当我尝试在百里叶中呈现我的视图时,遇到错误Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'currentTemperature' cannot be found on object of type 'reactor.core.publisher.MonoMapFuseable' - maybe not public or not valid?
Spring WebFlux文档声明"具有反应类型包装器的模型属性被解析为它们的实际值",但是将Mono<;>作为模型传递给视图会给出上面的错误。
@RequestMapping(path = "/")
@GetMapping
public String home(Model model) {
Mono<ThermostatState> thermostatState = thermostatClient.fetchThermostatState();
model.addAttribute("thermostatState", thermostatState);
return "home";
}
阻止Mono<;>并展开内部值会使模板呈现不变,但在某种程度上消除了使用反应库的意义。
@RequestMapping(path = "/")
@GetMapping
public String home(Model model) {
Mono<ThermostatState> thermostatState = thermostatClient.fetchThermostatState();
ThermostatState unwrappedState = thermostatState.block();
model.addAttribute("thermostatState", unwrappedState);
return "home";
}
该项目完全依赖于Spring启动器依赖项,并且没有显式配置类。
推荐答案
我能够通过从我的pom.xml中删除以下内容来解决此问题
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
这是由Spring starter毫无怨言地添加的,但它与Webflow准不兼容。这个应用程序运行时没有任何问题,但当它在启动日志中报告它是从Tomcat启动的,而不是Netty时,你可以感觉到出了问题。这表明它是作为老式的MVC应用程序运行的,而不是Webflow应用程序。发现这一点后,我能够找到另一个问题的解释性答案:https://stackoverflow.com/a/48418409/23276(症状不同,但答案相同)。这里还有更多的解释:https://stackoverflow.com/a/51378560/23276
我最初能够通过创建一个单依赖项示例应用程序来证明事情是可行的,该应用程序按照我在文档中所期望的和看到的方式工作。然后,我尝试逐个删除不同的依赖项,直到发现冲突。
在对此进行故障排除时,我的IDE做了一些奇怪的事情来缓存依赖项,这阻碍了我的工作。当我拖到命令行并尝试使用mvn clean
和mvn spring-boot:run
直到找到损坏的依赖项时,发现问题变得更容易了。
这篇关于在渲染百里叶视图之前未解析Webflow反应对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在渲染百里叶视图之前未解析Webflow反应对象
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- 转换 ldap 日期 2022-01-01
- 获取数字的最后一位 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01