从BootStrap中的registerObjectMarshaller()访问请求参数

时间:2011-11-04 23:44:38

标签: json grails groovy bootstrapping

我使用JSON.registerObjectMarshaller()方法在Grails中将对象编组为JSON,该方法在BootStrap类中调用。

我的对象图有许多嵌套对象,例如用户 - >地址 - >电话和我有一个每个对象的编组。

我有一个场景,我希望能够返回顶级对象的“浅”或“深”版本。在浅层请求的情况下,代替地址我想返回该字段。在深度版本的情况下,其他对象编组器可以像往常一样委托。

我想根据请求中传递的参数的值做深度与浅度,但是我不知道如何在BootStrap类的registerObjectMarshaller()方法中访问请求参数。

一旦我有办法访问这些参数,我可以根据需要定制它。

任何指针都会非常感激。

1 个答案:

答案 0 :(得分:0)

我曾经尝试过针对XML的对象marshaller方法,遗憾的是它没有成功。 与你类似,我没有一种表示对象的方法。我有两个以上,但我认为只有当你想做一些微不足道的事情时,物品编组才是一种方法。如果您需要更多,请忘掉它们。 您可以更容易地创建服务或使用静态方法的类,这些方法将根据您传递的值为您生成JSON。

您可以使用JsonGroovyBuilder来实现它,然后将其转换为字符串并将其包装在一个漂亮的http标头或您需要的任何内容中。 在我的情况下它看起来像这样[请注意,这是用于XML,所以你必须使用JsonGroovyBuilder,或其他 - 适合你 - 你可能不需要像我一样使用StringWriter]:

    def writer = new StringWriter()
    def xml = new MarkupBuilder(writer)

    def retData = someService.doSomething()

    def xmlGen = new XmlResponseGenerator(xml, retData)
    render(contentType: 'text/xml', encoding: "UTF-8", text: writer.toString())