首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Grails,如何获取请求对象

Grails,如何获取请求对象
EN

Stack Overflow用户
提问于 2014-05-20 17:59:00
回答 3查看 12.1K关注 0票数 8

Grails有一个定义为here的request对象。

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

代码语言:javascript
复制
No such property: request for class:xxx

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

代码语言:javascript
复制
import javax.servlet.http.HttpServletRequest
import org.springframework.web.context.request.ServletRequestAttributes
:
def my() {
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
}

但是,这提供了:

代码语言:javascript
复制
groovy.lang.MissingPropertyException: No such property: RequestContextHolder for class: net.ohds.ReportService

  1. 如何在Grails中获得请求对象的句柄?,

  1. ,你如何发现这一点?很少有人问过这个问题,它肯定在某个地方有记录,或者在一些例子中,但我也找不到。
EN

回答 3

Stack Overflow用户

发布于 2015-05-18 09:36:02

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

grails-app/services/com/example/MyService.groovy

代码语言:javascript
复制
import org.grails.web.util.WebUtils
...
def request = WebUtils.retrieveGrailsWebRequest().getCurrentRequest()
def ip = request.getRemoteAddr()

文档:

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

注意:

旧的codehaus包已被弃用。

票数 17
EN

Stack Overflow用户

发布于 2014-05-20 19:58:39

尝试以下代码:

代码语言:javascript
复制
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()
票数 8
EN

Stack Overflow用户

发布于 2014-05-20 18:04:25

因为您没有在ReportService中导入"org.springframework.web.context.request.RequestContextHolder“类,所以我估计您可能会得到"groovy.lang.MissingPropertyException: No got : RequestContextHolder for class: net.ohds.ReportService”。

访问请求对象最常见的地方是在控制器中。在控制器中,您只需引用request属性,它就会出现在那里。参见http://grails.org/doc/latest/ref/Controllers/request.html

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

更新

我不知道为什么您在将请求从控制器传递到服务时遇到问题,但您可以做到。我怀疑你错误地调用了这个方法,但是像这样的东西是可以工作的…

代码语言:javascript
复制
// 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...
    }
}

控制器..。

代码语言:javascript
复制
// grails-app/controllers/com/demo/DemoController.groovy
package com.demo

class DemoController {

    def helperService

    def index() {
        helperService.doSomethingWithRequest request
        render 'Success'
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23756628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档