【问题标题】:Grails: Accessing the request paramters without wiping them outGrails:访问请求参数而不清除它们
【发布时间】:2014-11-26 20:35:41
【问题描述】:

根据文件上的命令对象和数据绑定。一旦你读取了 params 对象,这个对象就不能再被重用了。

来自文档:

将请求正文绑定到命令对象 http://grails.org/doc/2.3.x/guide/theWebLayer.html#commandObjects

请注意,正在解析请求的主体以使其正常工作。此后任何读取请求正文的尝试都将失败,因为相应的输入流将为空。控制器操作可以使用命令对象,也可以自己解析请求的主体(直接解析,或者通过引用 request.JSON 之类的内容),但不能同时使用两者。

我正在尝试查看过滤器中的参数(在请求控制器之前命中)。将参数记录到日志会导致控制器获取空参数对象吗?从看起来是这种情况的文档中。但是,我怎样才能访问这些参数而不在过滤器中清除它们?

【问题讨论】:

  • 您可能会将请求正文与请求参数混淆。正文是InputStream,因此一旦读取,您就位于流的末尾,因此无法再次读取。请求参数可以重复访问,只要有意义就可以。

标签: grails web-applications


【解决方案1】:

一旦你读取了 params 对象,这个对象就永远不能被重用 再次。

这是不正确的。您可以一遍又一遍地读取请求参数。不能一遍又一遍地阅读的是请求的正文。正文和请求参数是两个不同的东西。

【讨论】:

  • 您的问题并没有真正表明这一点,但如果您真正想要的是在过滤器中读取请求的正文,您可以这样做,然后对结果执行您想要的操作,但随后以后您将无法再次阅读正文。如果您想在过滤器中读取正文,然后访问其中的一些信息,过滤器可以将该数据放在参数映射中,或将其存储在会话中,或有状态 bean 等......(你有很多选项),但目前尚不清楚这是否真的是你想要做的。
  • 所以只是为了确认一下,可以看到并重用过滤器中的 params 对象,而不会对控制器产生负面影响?我相信你回答了我关于 HTTP.get 元类问题的问题。我仍然需要在那张贴一张票。
  • “所以只是为了确认一下,可以看到并重复使用过滤器中的 params 对象,而不会对控制器产生负面影响?” - 那是正确的。您可以一遍又一遍地从params 中提取值。
  • “我相信你已经回答了我关于 HTTP.get 元类问题的问题。我仍然需要为此张贴一张票。” - 这不会敲响警钟。你指的是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多