簡體   English   中英

從Spring訪問普通Java類中的HttpServletRequest對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM