2016-06-08 53 views
1

Grails 2.5.4 docs表示可以從整個域組類的渲染中排除屬性。從所有Grails域類的渲染中排除屬性

有一些默認配置的渲染器以及註冊或覆蓋給定域類甚至是域類集合的渲染器的能力。

但是在文檔中沒有給出如何執行此操作的示例。有誰知道如何排除所有我的域類的屬性?具體而言,我試圖擺脫Grails自動添加到響應主體的classenumType字段。

回答

1

我不知道你是在談論這一點,但你可以忽略某些屬性,當您render as JSON,覆蓋的Marshaller這裏是代碼:

static { 
    grails.converters.JSON.registerObjectMarshaller(NAMEOFYOURCLASS) { 
    return it.properties.findAll {k,v -> k != 'class' && k!='declaringClass'} 
    } 
} 

,或者如果你想創建定製的渲染,你可以做這樣的事情

static { 
    grails.converters.JSON.registerObjectMarshaller(NAMEOFYOURCLASS) { 
     def lista = [:] 
     lista['id'] = it.id 
     lista['name'] = it.name 
     lista['dateCreated'] = it.date?.format("dd/MM/yyyy HH:mm") 
     return lista 
    } 
} 

你可以把它放在你認爲它更好地其實我更喜歡把它放在課堂上,我正在重寫,因爲信我能找到它,或者如果另外一個人它正在查看代碼,他/她可以輕鬆找到它。

+0

這是正確的想法,但我不想爲我的Grails項目中的每個域類註冊一個編組器或一個渲染器。從API的角度來看,我認爲任何設計任何API的公司都不希望在響應中包含'class'屬性,所以我很驚訝沒有一個全球性的單線程可以擺脫這個無關的域應對機構。 –

2

似乎沒有任何好的方法來做到這一點。我發現,如果你註冊一個超類的排除,所有的子類也「繼承」排除。所以爲了擺脫的所有 Groovy對象(它覆蓋所有域類),我添加了以下bean到resources.groovy

groovyObjectJsonRenderer(JsonRenderer, GroovyObject) { 
    excludes = ['class', 'declaringClass', 'errors', 'version'] 
}