本文介紹了Active Spring不支持將HttpServletRequest作為REST終結點中的參數?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我創建了一個RestController,如下所示:
@RestController
public class GreetingController {
@RequestMapping(value = "/greetings", method = RequestMethod.GET)
public Mono<Greeting> greeting(HttpServletRequest request) {
return Mono.just(new Greeting("Hello..." + request.toString()));
}
}
不幸的是,當我嘗試訪問”greetings”終結點時,收到異常:
類型為的參數[0]沒有解析器
[org.apache.catalina.servlet4preview.http.HttpServletRequest]
我正在使用
compile('org.springframework.boot.experimental:spring-boot-starter-web-reactive')
如何修復此問題?
Link到完整堆棧跟蹤。Link轉到build.gradle
———-EDIT———-
使用界面。現在獲得:
類型為的參數[0]沒有解析器
方法上的[javax.Servlet.HTTp.HttpServletRequest](REST相同)
推薦答案
您不應該在Spring反應式Web應用程序中使用Servlet API。這是不受支持的,這使得您的應用程序依賴于容器,而Spring Web Reactive可以與非Servlet運行時(如Netty)一起工作。
相反,您應該使用Spring提供的HTTP API;以下是經過一些更改的代碼示例:
import org.springframework.http.server.reactive.ServletServerHttpRequest;
@RestController
public class GreetingController {
@GetMapping("/greetings")
public Mono<Greeting> greeting(ServerHttpRequest request) {
return Mono.just(new Greeting("Hello..." + request.getURI().toString()));
}
}
您可以ServerWebExchange
或直接ServerHttpRequest
/ServerHttpResponse
注入。
這篇關于Active Spring不支持將HttpServletRequest作為REST終結點中的參數?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,