本文介紹了Active Spring不支持將HttpServletRequest作為REST終結(jié)點(diǎn)中的參數(shù)?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我創(chuàng)建了一個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()));
}
}
不幸的是,當(dāng)我嘗試訪問”greetings”終結(jié)點(diǎn)時,收到異常:
類型為的參數(shù)[0]沒有解析器
[org.apache.catalina.servlet4preview.http.HttpServletRequest]
我正在使用
compile('org.springframework.boot.experimental:spring-boot-starter-web-reactive')
如何修復(fù)此問題?
Link到完整堆棧跟蹤。Link轉(zhuǎn)到build.gradle
———-EDIT———-
使用界面。現(xiàn)在獲得:
類型為的參數(shù)[0]沒有解析器
方法上的[javax.Servlet.HTTp.HttpServletRequest](REST相同)
推薦答案
您不應(yīng)該在Spring反應(yīng)式Web應(yīng)用程序中使用Servlet API。這是不受支持的,這使得您的應(yīng)用程序依賴于容器,而Spring Web Reactive可以與非Servlet運(yùn)行時(如Netty)一起工作。
相反,您應(yīng)該使用Spring提供的HTTP API;以下是經(jīng)過一些更改的代碼示例:
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
注入。
這篇關(guān)于Active Spring不支持將HttpServletRequest作為REST終結(jié)點(diǎn)中的參數(shù)?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,