XMLとJSON応答
4209 ワード
XMLとJSON応答
Grailsは、XMLおよびJSON応答を生成するためのいくつかの異なる方法をサポートする.1つ目は、renderメソッドを暗黙的に通過することです.
このコードの結果は次のようになります.
タグジェネレータを使用する場合は、名前の競合を避けるように注意する必要があります.たとえば、このコードでエラーが発生します.
なぜなら、ここでのローカル変数
この場合、結果はほぼ同じになります.
同じネーミング競合の危険はJSONジェネレータに適用されます.
(注:ここには、ポインタなどのデータは、別のコンポーネントに理解されるために、カラムセット(Marshalling)の解釈を添付します.カラムセット(Marshalling)はデータフォーマットの変換方法といえる.
Grailsはまた、特定の変換器を介してXMLに対する自動カラムセット(Marshalling)レルムクラスをサポートします.
まず、
次の高度に読みやすい構文を使用して、レルムクラスをXMLに自動的に変換できます.
出力結果は次のように表示されます.
変換器を使用する代わりの方法はGrailsのcodecs特性を使用することである.codecsプロパティは、encodeAsXMLおよびencodeAsJSONメソッドを提供します.
Grailsは自動列セット(Marshalling)がJSONのために同じメカニズムを通過することをサポートしています.単純代替
出力結果は次のように表示されます.
再び代替として、
renderメソッドを使用してXMLを出力する
Grailsは、XMLおよびJSON応答を生成するためのいくつかの異なる方法をサポートする.1つ目は、renderメソッドを暗黙的に通過することです.
render
メソッドは、タグジェネレータ生成XMLを生成するためにコードブロックを渡すことができるdef list = {
def results = Book.list()
render(contentType:"text/xml") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}
このコードの結果は次のようになります.
<books>
<book title="The Stand" />
<book title="The Shining" />
</books>
タグジェネレータを使用する場合は、名前の競合を避けるように注意する必要があります.たとえば、このコードでエラーが発生します.
def list = {
def books = Book.list() // naming conflict here
render(contentType:"text/xml") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}
なぜなら、ここでのローカル変数
books
は、メソッドとして呼び出されることを意図しているからである.レンダー方式でJSONを出力する
render
メソッドは、JSONを出力するために同様に使用することができる.def list = {
def results = Book.list()
render(contentType:"text/json") {
books {
for(b in results) {
book(title:b.title)
}
}
}
}
この場合、結果はほぼ同じになります.
[
{title:"The Stand"},
{title:"The Shining"}
]
同じネーミング競合の危険はJSONジェネレータに適用されます.
自動XML列セット(Marshalling)
(注:ここには、ポインタなどのデータは、別のコンポーネントに理解されるために、カラムセット(Marshalling)の解釈を添付します.カラムセット(Marshalling)はデータフォーマットの変換方法といえる.
Grailsはまた、特定の変換器を介してXMLに対する自動カラムセット(Marshalling)レルムクラスをサポートします.
まず、
grails.converters
クラスパッケージをコントローラにインポートします.import grails.converters.*
次の高度に読みやすい構文を使用して、レルムクラスをXMLに自動的に変換できます.
render Book.list() as XML
出力結果は次のように表示されます.
<?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>
変換器を使用する代わりの方法はGrailsのcodecs特性を使用することである.codecsプロパティは、encodeAsXMLおよびencodeAsJSONメソッドを提供します.
def xml = Book.list().encodeAsXML()
render xml
自動JSON列セット(Marshalling)
Grailsは自動列セット(Marshalling)がJSONのために同じメカニズムを通過することをサポートしています.単純代替
XML
はJSON
render Book.list() as JSON
出力結果は次のように表示されます.
[
{"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
を使用して同じ効果を達成することができます.