(快速参考)

请求

目的

request 对象是 Servlet API 中 HttpServletRequest 接口的一个实例

示例

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

        render(view: actionName)
    }
}

描述

HttpServletRequest 类可用于(除其他事项之外)获取请求标头、存储请求作用域属性以及建立有关客户端的信息。请参阅 Servlet API 的 javadoc 以获取更多信息。

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"

通常可以通过 getAttributeServletRequest 访问的请求属性还可以通过数组索引运算符或取消引用运算符索引查找

def user = request['user']

request['user'] = 'John'

assert 'John' == request.user