(快速參考)

request

目的

request 物件是 Servlet API 的 HttpServletRequest 介面的執行個體

範例

class BookController {
    def list() {
        log.info "User agent: " + request.getHeader("User-Agent")

        render(view: actionName)
    }
}

說明

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 - 如果目前的請求是 HTTP GET 請求,則傳回 true。

  • post - 如果目前的請求是 HTTP POST 請求,則傳回 true。

  • each - Groovy 的 each 方法的實作,用於反覆處理請求屬性。

  • find - Groovy 的預設 find 方法的實作,用於搜尋請求屬性。

  • findAll - Groovy 的預設 findAll 方法的實作,用於搜尋請求屬性。

  • format - 請求格式,用於 內容協商

  • withFormat(Closure) - withFormat 方法,用於 內容協商

  • xhr - 如果目前的請求是 Ajax 請求,則傳回 true

XMLJSON 屬性對 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