如何在Grails中注册自定义json反序列化器/解析器?

时间:2014-06-28 08:04:55

标签: grails grails-2.0 grails-controller

我是否应该使用过滤器或拦截器来满足要求,是不是有更简单的方法?

更新
看起来我的旧代码工作正常,我无意中编辑了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')]
    }
 }

1 个答案:

答案 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
相关问题