2011-11-04 27 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。似乎這是最終的途徑,如果需要更多的靈活性...... –