2015-07-11 34 views
1

在Grails JSON轉換器上下文的上下文中,尋找對由於MongoDB Query(結果不包含關聯的域對象)而產生的JSON數據進行轉換。Grails轉換器JSON在實例上編組

其中一個字段需要轉換(即貨幣符號需要通過剝離貨幣符號轉換爲數字)。

在這種情況下,是否可以將編組僅應用於此實例數據。

使用:

JSON.registerObjectMarshaller(JSONObject) 

在代碼中的所有其他地方全局應用到所有的JSONObject。

我不希望爲此目的創建域對象,並希望住在Grails轉換對象,比如把JSONObject等

回答

1

是的,你可以很容易地通過使用名爲marshallers實現它。即註冊相同的命名空間的編組BootStrap.groovy中:

JSON.createNamedConfig("foo") { 
    it.registerObjectMarshaller(new CustomDataMarshaller) 
} 

的Marshaller代碼:只有您想即使用它的任何具體的實例或從結果中返回

class CustomDataMarshaller implements ObjectMarshaller<JSON> { 

    @Override 
    boolean supports(Object object) { 
     return object instanceof Currency // Or directly BasicDbObject if you want to marshall the whole MongoDb result 
    } 

    @Override 
    void marshalObject(Object object, JSON converter) throws ConverterException { 
     // Convert here 
    } 
} 

現在使用這個編組MongoDB調用:

class MyController { 

    def test() { 
     def data // Any data as you want to marshal 

     JSON.use("foo") { 
      respond(data) 
      // OR 
      // render(data as JSON) 
     } 
    } 
}