使用render方法輸出XML
Grails支持一些不同的方法來產(chǎn)生XML和JSON響應(yīng)。第一個是隱式的通過render方法。
render
方法可以傳遞一個代碼塊來執(zhí)行標(biāo)記生成器產(chǎn)生XML
def list = {
def results = Book.list()
render(contentType:"text/xml") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}
這段代碼的結(jié)果將會像這樣:
<books>
<book title="The Stand" />
<book title="The Shining" />
</books>
注意,當(dāng)你使用標(biāo)記生成器時(shí),必須小心避免命名沖突。例如,這段代碼將產(chǎn)生一個錯誤:
def list = {
def books = Book.list() // naming conflict here
render(contentType:"text/xml") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}
原因是,這里的一個本地變量books
企圖作為方法被調(diào)用。
使用render方法輸出JSON
render
方法可以同樣被用于輸出JSON:
def list = {
def results = Book.list()
render(contentType:"text/json") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}
在這種情況下,結(jié)果就會是大致相同的:
[
{title:"The Stand"},
{title:"The Shining"}
]
同樣的命名沖突危險(xiǎn)適用于JSON生成器。
自動XML列集(Marshalling)
(譯者注:在此附上對于列集(Marshalling)解釋:對函數(shù)參數(shù)進(jìn)行打包處理得過程,因?yàn)橹羔樀葦?shù)據(jù),必須通過一定得轉(zhuǎn)換,才能被另一組件所理解??梢哉f列集(Marshalling)是一種數(shù)據(jù)格式的轉(zhuǎn)換方法。)
Grails同樣支持自動列集(Marshalling)領(lǐng)域類為XML通過特定的轉(zhuǎn)換器。
首先,導(dǎo)入grails.converters
類包到你的控制器(Controllers)中:
import grails.converters.*
現(xiàn)在,你可以使用下列高度易讀的語法來自動轉(zhuǎn)換領(lǐng)域類成XML:
render Book.list() as XML
輸出結(jié)果看上去會像下列這樣:
<?xml version="1.0" encoding="ISO-8859-1"?>
<list>
<book id="1">
<author>Stephen King</author>
<title>The Stand</title>
</book>
<book id="2">
<author>Stephen King</author>
<title>The Shining</title>
</book>
</list>
一個使用轉(zhuǎn)換器的替代方法是使用Grails的codecs特性。codecs特性提供了encodeAsXML和encodeAsJSON方法:
def xml = Book.list().encodeAsXML()
render xml
自動JSON列集(Marshalling)
Grails同樣支持自動列集(Marshalling)為JSON通過同樣的機(jī)制。簡單替代XML
為JSON
render Book.list() as JSON
輸出結(jié)果看上去會像下列這樣:
[
{"id":1,
"class":"Book",
"author":"Stephen King",
"title":"The Stand"},
{"id":2,
"class":"Book",
"author":"Stephen King",
"releaseDate":new Date(1194127343161),
"title":"The Shining"}
]
再次作為一種替代,你可以使用encodeAsJSON
達(dá)到相同的效果
posted on 2008-06-05 16:21
周銳 閱讀(553)
評論(0) 編輯 收藏 所屬分類:
Groovy&Grails 、
Java 、
JavaScript 、
XML