我是否应该使用过滤器或拦截器来满足要求,是不是有更简单的方法?
更新
看起来我的旧代码工作正常,我无意中编辑了resources.groovy并使bean定义无效
resources.groovy
================
beans = {
dateConverter DateConverter
}
BootStrap.groovy
================
class BootStrap {
def grailsApplication
def init = { servletContext ->
def ctx = grailsApplication.mainContext
def dataBinder = ctx.getBean(org.grails.databinding.SimpleDataBinder)
dataBinder.conversionHelpers[Date] = [ctx.getBean('dateConverter')]
}
}
答案 0 :(得分:1)
如果您想要全局更改它,您可以执行以下操作:
class Foo {
String name
}
并在Bootstrap.groovy
(或您喜欢的任何地方):
JSON.registerObjectMarshaller(Foo) {
[name:it.name()]
}
如果只在特殊情况下需要它,最简单的(根据我的经验)是创建一个地图并将其转换为JSON
[name:'foo'] as JSON
更新
@BindUsing
也适用于命令对象..
class FooController {
def foo (FooCmd bind) {
render (text: "${bind.foo}")
}
}
class FooCmd {
@BindUsing({ obj, src ->
"@BindUsing ${src['foo']}"
})
String foo
}
curl -i -H "Content-Type: application/json" -d '{"foo":"FOO!!!!"}' http://localhost:8080/Stackoverflow/Foo/foo