[英]Accessing HttpServletRequest object in a normal Java class from Spring
我在Spring MVC 3.06 Web應用程序中有一個普通的Java類。
在這個類中,我想在方法中注入或獲取HttpServletRequest
對象。
我知道我可以通過這個,但我想知道如何在不將其傳遞給方法的情況下獲取請求。 也許使用注釋或類似?
此外,以這種方式獲取請求的“真實”問題是什么,除了一些人認為它是丑陋的編碼。 我的意思是,以這種方式訪問它是否不穩定?
優選地,非應用服務器依賴方式
我見過
(HttpServletRequest) RequestContextHolder.getRequestContext().getExternalContext().getNativeRequest()
但這似乎不適用於Spring MVC 3.06。 RequestContextHolder
沒有getRequestContext()
方法。
使用
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
我不確定你在哪里得到RequestContextHolder.getRequestContext()
,這是完全錯誤的。
以這種方式訪問它是不穩定的?
不,它足夠穩定,假設您始終將代碼作為HttpServlet
請求線程的一部分運行。 主要問題是,它是丑陋的,它使您的代碼難以測試。 這是足夠的理由不使用它。
如果必須使用它,請將其與代碼分離,例如
public void doSomething() {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
doSomething(request);
}
void doSomething(HttpServletRequest request) {
// put your business logic here, and test this method
}
@Context HttpServletRequest httpServletRequest = null;
用這個
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.