はじめに
今年はGrailsのことを何か書くと宣言していたのに、何もせずにいたのですがようやく書き始めます。Qiitaも初体験なので、不備や改善点があれば教えていただけると幸いです。
今回は、GrailsでJSONを返す方法の一つについて書きます。Grailsのバージョンは2.4.3で試しています。
#自動JSONマーシャリング
GrailsでJSONを返す方法はいくつかありますが、今回は個人的に一番楽チンな自動マーシャリングを使います。なお、マーシャリング(Marshalling)っていうのは、異なるコンピューターシステムやプログラミング言語の間で、データをやり取りできるようにするための処理
だそうです(参考)。
そうすると、自動でないマーシャリングもあるのかという話になるわけですが、あります。それはまた別エントリーで。
さて、日本語ドキュメントの該当部分をみてみると。
自動JSONマーシャリング
GrailsではXMLと同じ仕組みで、JSONの自動マーシャリングもサポートしています。単純に先のXMLをJSONにするだけです
と記載があり、サンプルとして
render Book.list() as JSON
と記載されていました。要するに as JSON
を呼べばいいわけです。簡単。
試してみる
というわけで、例えば
package jsonsample
class Book {
String title
String author
static constraints = {
}
}
package jsonsample
import grails.converters.JSON
class BookController {
def index() {
render Book.list() as JSON
}
}
とドメインとコントローラーを作りまして、デモ用のデータをBootStrapで作成します。
import jsonsample.Book
class BootStrap {
def init = { servletContext ->
new Book(title: "Groovyイン・アクション", author: "Dierk Konig").save()
new Book(title: "The Definitive Guide to Grails", author: "Graeme Rocher").save()
}
}
その上で、コントローラーをたたくと、(このサンプルの場合は http://localhost:8080/JsonSample/book/index
)以下のようなJSONが返ります。
[
{
"class": "jsonsample.Book",
"id": 1,
"author": "Dierk Konig",
"title": "Groovyイン・アクション"
},
{
"class": "jsonsample.Book",
"id": 2,
"author": "Graeme Rocher",
"title": "The Definitive Guide to Grails"
}
]
単純なドメインであれば、結構簡単に作成できますね。
最後に
本当はもう少しディープな内容を書きたかったのですが、前段で力つきたので別エントリー書きます。