2014-03-13 44 views
0

我目前使用的自定義編組渲染JSON:的Json佈局Grails的迴應

 JSON.registerObjectMarshaller(PlannedEvent) { PlannedEvent pe -> 
     return [ 
       id : pe.id, 
       event : [ 
        eventId : pe.baseEvent.id, 
        subject : pe.baseEvent.subject 
       ], 

       //rooms: pe.rooms 

       rooms: [ 
        id : pe.rooms 
       ] 

     ] 
    } 

這給出了以下的輸出:

{"id":1,"event":{"eventId":626,"subject":"Baggeren hc (Kv2)"},"rooms":{"id":[8]}} 

我想知道如何設置我的地圖所以房間的價值是一個列表,每個指標代表一個單獨的房間。而不是像「id」這樣的密鑰,它被設置爲一個列表。評論中的解決方案提供了關於房間的很多信息,所以我不能使用它。 通緝的結果:

"rooms":[{"id":8},{"id":9}]} 
+1

嘗試'rooms:pe.rooms.collect {[id:it]}' –

+0

它的工作方式如下:rooms:pe.rooms.collect {Room room - > [id:room.id]} – majorbelow

回答

0

如果我是正確的爲您的域模型,你有PlannedEvent &房。所以之間的hasMany關係,如果你想只得到房間列表,從您需要註冊PlannedEvent DOMIAN標識爲客房定製marshallar也喜歡:

JSON.registerObjectMarshaller(Room) { Room room -> 
// Map of IDs is returned from here 
def returnMap = [:] 
returnMap["id"] = room.id 
return returnMap 
} 

而且在PlannedEvent:

JSON.registerObjectMarshaller(PlannedEvent) { PlannedEvent pe -> 
// This is also a map but the value of key rooms will contain the list of IDs of each room 
def roomList = [:] 
roomList["rooms"] = pe.rooms 
return roomList 
} 

並在下次請澄清你的domians &也是你想清楚。

+0

Thanks,你知道我如何根據請求返回不同的結果,例如:/ plannedevents =>給出了沒有詳細信息的列表,/ plannedevents/1 =>給出了plannedevent的詳細信息 - – majorbelow