本文介紹了在渲染百里葉視圖之前未解析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反應對象的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,