0
在Grails 2.5.0中,是否可以从JSON POST主体中将属性值注入到不是命令对象的控制器操作方法参数?例如,转换为字符串,基元等。Grails 2.5.0来自JSON POST主体的控制器操作方法参数
这在Grails 2.2.4中是可能的,但我还没有找到在2.5.0中做到的方法。
(我知道的查询字符串值可以在两个Grails的2.5.0 & 2.2.4注入控制器的操作方法参数)
在Grails 2.5.0中,是否可以从JSON POST主体中将属性值注入到不是命令对象的控制器操作方法参数?例如,转换为字符串,基元等。Grails 2.5.0来自JSON POST主体的控制器操作方法参数
这在Grails 2.2.4中是可能的,但我还没有找到在2.5.0中做到的方法。
(我知道的查询字符串值可以在两个Grails的2.5.0 & 2.2.4注入控制器的操作方法参数)
见绑定请求身体命令对象在http://grails.github.io/grails-doc/2.3.0/guide/introduction.html#whatsNew23部分。它在Grails 2.3.x中有所改变。基本上,如果您尝试访问请求JSON两次,它将不可用,因为在解析数据并使用它绑定任何CommandObject或任何域实例(作为命令对象)后,Grails会关闭请求流。
所以,如果你交接请求JSON的动作说支持:{"foo": "bar"}
和你正在试图做到这一点:
class SomeController {
def test(String foo) {
println foo // Will be null
println request.JSON.foo // Will be "bar"
}
}
而是任何域类绑定将现在的工作:
class MyDomainClass {
String foo
}
而且修改后的控制器操作:
class SomeController {
def test(MyDomainClass domainInstance) {
println domainInstance.foo // Will be "bar"
println request.JSON // Will be null since request stream is closed and binded to the domainInstance
}
}
感谢您的信息。听起来Grails 2.3+不能将非命令对象注入到操作方法中。我应该提到我已经知道我可以使用命令对象或request.JSON来获取JSON HTTP正文属性。我不想查看每个控制器中的每个操作方法,然后必须更改每个受影响方法中的代码以通过String /原始HTTP主体数据(因为命令对象和request.JSON都需要更改代码) 。 – XDR
哦,所以你需要一些替代代码来向后支持你的代码,因为它在Grails 2.3+中不被支持? –
我不必有另一种方法,但是避免查看数十个控制器和数百个我没有写的动作方法来确定哪些参数来自查询字符串,哪些来自HTTP体。 – XDR