2012-06-14 11 views
0

我已經創建了一個返回一些JSON一個小型的web服務,返回的JSON值的樣子:Grails的Web服務JSON ID字段

[{"class":"simple.web.service.Stock","id":null,"name":"GOOG","price":123.45}, {"class":"simple.web.service.Stock","id":null,"name":"APPL","price":345.67}] 

我的對象不包含ID場。這是從哪裏來的?它應該如何填充?

另外,是否包含現場標準?如果我不想包括那個怎麼辦?

回答

1

id屬性默認情況下在域對象上創建,就像version(除非您明確指出它不包括version)。兩者都在正常使用情況下自動設置和維護。如果需要,您可以控制ID的創建/填充方式 - 請參閱manual

出於安全原因,默認情況下,JSON構造函數不會返回實際的ID或版本。要包含它們或不包含其他項目,您可能需要創建自定義JSON編組器。

像這樣的事情在你的引導,只包括nameprice

import grails.converters.JSON 
class BootStrap { 
    def init = {servletContext -> 
     JSON.registerObjectMarshaller(Stock) { 
      def returnArray = [:] 
      returnArray['name'] = it.name 
      returnArray['price'] = it.price 
      return returnArray 
    } 

}

+0

凱利,謝謝。那麼如果我想要,我可以覆蓋ID嗎?說我的對象有一個「id」字段?或者通常用於grails的內部使用。 –

+0

'id'是Grails常用的字段,我從來沒有嘗試過創建自己的名爲'id'的列 - 儘管我偶爾使用了id映射來改變行爲。你可以改變它的生成方式(使用'id generator'映射),它是表中的列 - 當你映射遺留表格時(使用'id column'映射)並創建一個組合鍵(使用'id複合「映射)。取決於你如何映射你的id,你可能不會在數據庫中獲得實際的「id」列。 – Kelly