class BookController {
def list() {
log.info "User agent: " + request.getHeader("User-Agent")
render(view: actionName)
}
}
request
目的
request
物件是 Servlet API 的 HttpServletRequest 介面的執行個體
範例
說明
HttpServletRequest 類別對於取得要求標頭、儲存要求範圍屬性以及建立有關用戶端資訊等用途非常有用。請參閱 Servlet API 的 javadocs 以取得更多資訊。
Grails 透過新增下列新屬性和方法來增強 HttpServletRequest
執行個體
-
XML
- `XmlSlurper’s GPathResult 類別的執行個體,允許剖析輸入的 XML 要求(適用於 REST)。 -
JSON
- Grails 的 JSONObject 類別的執行個體,允許剖析輸入的 JSON 要求(適用於基於 JSON 的 REST)。 -
forwardURI
- 對於取得目前的請求 URI 非常有用,因為request
物件的requestURI
屬性會傳回原始 URI,而不是配對的 URI。 -
isRedirected()
- 如果已針對此請求發出重新導向,則傳回true
(Grails 2+)。 -
get
- 如果目前的請求是 HTTPGET
請求,則傳回 true。 -
post
- 如果目前的請求是 HTTPPOST
請求,則傳回 true。 -
each
- Groovy 的each
方法的實作,用於反覆處理請求屬性。 -
find
- Groovy 的預設find
方法的實作,用於搜尋請求屬性。 -
findAll
- Groovy 的預設findAll
方法的實作,用於搜尋請求屬性。 -
format
- 請求格式,用於 內容協商。 -
withFormat(Closure)
- withFormat 方法,用於 內容協商。 -
xhr
- 如果目前的請求是 Ajax 請求,則傳回true
。
XML
和 JSON
屬性對 XML API 很實用,可以用來剖析輸入的 XML 或 JSON 封包。例如,給定一個請求主體
<book>
<title>The Stand</title>
</book>
可以輕鬆地剖析
def title = request.XML?.title
render "The Title is $title"
通常可以從 getAttribute 存取的請求屬性,也可以使用陣列索引運算子或解除參考運算子索引。
def user = request['user']
request['user'] = 'John'
assert 'John' == request.user