2011-10-09 53 views
0

有沒有辦法訪問服務中的當前響應?我需要這個來刪除過期的Facebook的cookie ...從RequestContextHolder訪問響應

我知道如何訪問當前請求:

RequestContextHolder.currentRequestAttributes().getRequest() 

不乏有反應,但。

回答

1

服務不應該知道http,因爲它只是一個具有實用方法的Groovy(有時是Java)類。但是,由於您很可能是從可以訪問的控制器調用它,因此可以從Web層中的請求中提取信息並將其傳遞到服務層進行處理。

+0

嗯,我真的不相信「純粹的一切」如果我有一個替代其中a)我必須將http數據傳遞給se上的所有方法服務層,甚至是那些不明顯的地方,這是必需的,或者b)僅僅讓Facebook服務訪問當前處理的請求的cookie並從那裏提取所有數據,然後我實際上選擇b)。 – julkiewicz

+0

這就是爲什麼我是從控制器到handlerInterceptor抽象通信AWAY的忠實粉絲。 業務邏輯應該只處理構建和返回'資源';我想說,現代架構中的格式化和安全檢查可以被刪除,因爲通信層需要處理轉發/重定向,這也可以是外部服務(即代理,消息隊列)的共同責任。 通過抽象通信,我們能夠更好地共享共享IO流的其他架構服務(即請求/響應)的功能和數據, – Orubel

0

我同意@Burt的一般說法,但是有像上面評論中提到的@julkiewicz這樣的情況,你必須訪問一個cookie,並且不想傳遞所有的信息(特別是如果cookie是在許多中間層不需要)。我發現這兩個選項是低於(第一是清潔的,但我不知道是否WebUtils優於RequestContextHolder,或可能反過來。

WebUtils.retrieveGrailsWebRequest().request.cookies 

RequestContextHolder.requestAttributes.request.request.request.cookies 

我不知道爲什麼有這麼多嵌套的request對象,但我證實了這一點對我來說,在Grails 2.4.2。