Grails有一个请求对象,其定义为here。
问题是当我尝试使用它时,我得到:
No such property: request for class:xxx
阅读前100次点击这个错误只产生了一个建议:
import javax.servlet.http.HttpServletRequest
import org.springframework.web.context.request.ServletRequestAttributes
:
def my() {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
}
然而,这给出了:
groovy.lang.MissingPropertyException: No such property: RequestContextHolder for class: net.ohds.ReportService
答案 0 :(得分: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()
文档:
https://docs.grails.org/latest/api/org/grails/web/util/WebUtils.html#retrieveGrailsWebRequest()
注意:
旧的codehaus
软件包已被弃用。
答案 1 :(得分: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()
答案 2 :(得分:1)
我希望你得到&#34; groovy.lang.MissingPropertyException:没有这样的属性:RequestContextHolder for class:net.ohds.ReportService&#34;因为你没有导入&#34; org.springframework.web.context.request.RequestContextHolder&#34; ReportService中的类。
想要访问请求对象的最常见位置是在控制器中。从控制器中,您只需引用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...
}
}
控制器......
// grails-app/controllers/com/demo/DemoController.groovy
package com.demo
class DemoController {
def helperService
def index() {
helperService.doSomethingWithRequest request
render 'Success'
}
}