使用Grail 1.3.7我發現JSON轉換器忽略了Domain對象的瞬態屬性。 問題:有沒有一種優雅的方法來解決這個障礙。Grails JSON轉換器和瞬態屬性
獎金問題:排除計算字段(瞬態道具)被髮送到響應的原因是什麼?
使用Grail 1.3.7我發現JSON轉換器忽略了Domain對象的瞬態屬性。 問題:有沒有一種優雅的方法來解決這個障礙。Grails JSON轉換器和瞬態屬性
獎金問題:排除計算字段(瞬態道具)被髮送到響應的原因是什麼?
一種方法是手動創建您的json響應,例如,
["prop1" : obj.prop1, "prop2" : obj.prop2, ...] as JSON
和JSON是對象
所以,如果你需要它來進行序列化的序列化(=持續的)狀態 - 你必須創建一個新的類,只是爲了json序列化,這將有你需要序列化的所有字段。
+1正確回答獎金Q.但是我覺得有一個合法的用例來標記一個字段的瞬態,但也讓JSON轉換器來撿起它 - 一個配置標誌將在這裏創造奇蹟:) – dbrin
如果你需要排除的JSON,我細使用JSONBuilder比轉換器一個更好的選擇,所包含的字段/細粒度控制。這裏的an example如何做到這一點。
您可以使用「marshallers」插件,並定義瞬態特性虛擬這樣的:
static marshalling = {
virtual {
yourPropery { value, json -> json.value(value.yourPropery) }
}
}
好吧我想......但如果我有20個字段運行? – dbrin
您可以通過調用domainClass.properties來獲取所有屬性,然後對這些屬性進行交互並生成json響應。有許多財產訪問方法。看看:http://grails.org/doc/latest/api/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClass.html – hitty5
我試過了,但我沒有看到一種方法來限制到的子集屬性給我關心的一次......我必須俯視一些東西。但我同意你的觀點,這可能是自定義JSON響應而不創建自定義編組器的最佳方式。 – dbrin