Grails,如何获取请求对象

Joh*_*tle 6 grails

Grails的具有被限定的请求对象在这里.

问题是当我尝试使用它时,我得到:

No such property: request for class:xxx
Run Code Online (Sandbox Code Playgroud)

阅读前100次点击谷歌搜索这个错误只产生了一个建议:

import javax.servlet.http.HttpServletRequest
import org.springframework.web.context.request.ServletRequestAttributes
:
def my() {
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
}
Run Code Online (Sandbox Code Playgroud)

但是,这给出了:

groovy.lang.MissingPropertyException: No such property: RequestContextHolder for class: net.ohds.ReportService
Run Code Online (Sandbox Code Playgroud)
  1. 如何处理Grails中的请求对象?
  2. 你怎么知道这件事?所以很少有人问这个问题,必须在某处或某些例子中记录,但我也找不到.

Dem*_*ian 14

在Grails 3.0中,从服务获取request对象使用:

在grails-app /服务/ COM /例子/ MyService.groovy

import org.grails.web.util.WebUtils
...
def request = WebUtils.retrieveGrailsWebRequest().getCurrentRequest()
def ip = request.getRemoteAddr()
Run Code Online (Sandbox Code Playgroud)

文档:https :
//docs.grails.org/latest/api/org/grails/web/util/WebUtils.html#retrieveGrailsWebRequest()

注意:
codehaus软件包已被弃用.


MKB*_*MKB 7

请尝试以下代码:

import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
import org.codehaus.groovy.grails.web.util.WebUtils

...

GrailsWebRequest webUtils = WebUtils.retrieveGrailsWebRequest()
def request = webUtils.getCurrentRequest()
Run Code Online (Sandbox Code Playgroud)


Jef*_*own 1

我希望您可能会得到“groovy.lang.MissingPropertyException:没有这样的属性:类的RequestContextHolder:net.ohds.ReportService”,因为您没有在您的文件中导入“org.springframework.web.context.request.RequestContextHolder”类报告服务。

想要访问请求对象的最常见位置是在控制器中。从控制器中,您只需引用该request属性,它就会在那里。请参阅http://grails.org/doc/latest/ref/Controllers/request.html

如何从其他地方访问请求对象的答案可能取决于其他地方是什么。

更新

我不知道为什么您在将请求从控制器传递到服务时遇到问题,但您可以。我怀疑您错误地调用了该方法,但类似这样的方法会起作用......

// grails-app/services/com/demo/HelperService.groovy
package com.demo

class HelperService {

    // you don't have to statically type the
    // argument here... but you can
    def doSomethingWithRequest(javax.servlet.http.HttpServletRequest req) {
        // do whatever you want to do with req here...
    }
}
Run Code Online (Sandbox Code Playgroud)

一个控制器...

// grails-app/controllers/com/demo/DemoController.groovy
package com.demo

class DemoController {

    def helperService

    def index() {
        helperService.doSomethingWithRequest request
        render 'Success'
    }
}
Run Code Online (Sandbox Code Playgroud)