2011-11-04 82 views
0

我使用在BootStrap类中调用的JSON.registerObjectMarshaller()方法将Grails中的对象编码为JSON。从BootStrap中的registerObjectMarshaller()访问请求参数

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

我有一个场景,我希望能够返回顶级对象的“浅”或“深”版本。在浅请求的情况下,代替我想要返回该字段的地址。在深层版本的情况下,其他对象封送处理器可以照常进行委派。

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

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

任何指针将不胜感激。

+0

感谢您的编辑。学到了新的东西...... –

回答

0

我曾经尝试过使用XML的对象编组方法,但遗憾的是它没有成功。 与你类似,我没有一种方法来表示对象。我有很多不止两个,但是我认为,对象Marshailer只有在你想做一些微不足道的事情时才能走。如果你需要更多,就忘了它们。 对于你来说,使用静态方法创建一个服务或类会很容易,它会根据你传递的值为你生成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()) 
+0

这是很好的信息,那是Krystian。似乎这是最终的途径,如果需要更多的灵活性...... –