RESTEasy JAXB Jettisonを使用したJSONの例
RESTEasyはhttp://jettison.codehaus.org/[Jettison JSON library]を使用してJAXBアノテーションオブジェクトをJSONとの間でマッピングします。このチュートリアルでは、JAXB注釈付きオブジェクトをJSON形式に変換してクライアントに返す方法を説明します。
1. RESTEasy JAXB Jettison
RESTEasy
で
JSONを使用するには、以下の依存関係が必要です。
File:pom.xml
<repositories> <repository> <id>JBoss repository</id> <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.2.1.GA</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxb-provider</artifactId> <version>2.2.0.GA</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jettison-provider</artifactId> <version>2.2.0.GA</version> </dependency> </dependencies>
2. JAXB XMLプロバイダ
オブジェクトを作成し、JAXBで注釈を付けます。 XMLプロバイダを使用する理由心配しないで、後で `@ BadgerFish`を使ってJSON形式に変換します。
package com.mkyong.rest; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "movie") public class Movie { String name; String director; int year; @XmlElement public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement public String getDirector() { return director; } public void setDirector(String director) { this.director = director; } @XmlAttribute public int getYear() { return year; } public void setYear(int year) { this.year = year; } }
3. JAX-RS
JSONファイル形式を返すには、サービスメソッドに
@ BadgerFish`と
@Produces( “application/json”) `と注釈を付けます。
RESTEasyはJSON変換を自動的に処理します。
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import org.jboss.resteasy.annotations.providers.jaxb.json.BadgerFish; @Path("/json/movie") public class JSONService { @BadgerFish @GET @Path("/get") @Produces("application/json") public Movie getMovieInJSON() { Movie movie = new Movie(); movie.setName("Transformers: Dark of the Moon"); movie.setDirector("Michael Bay"); movie.setYear(2011); return movie; } }
4.デモ
URIパターン ”
/json/movie/get
“が要求されると、以下のJSONファイルが返されます。
{ "movie": { "@year":"2011", "director":{ "$":"Michael Bay" }, "name":{ "$":"Transformers: Dark of the Moon" } } }
ソースコードをダウンロードする
ダウンロードする –
JAX-RS-Download-JSON-JAXB-Example.zip
(7 KB)
参考文献
-
http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Built
in
JAXB__providers.html[RESTEasy
JAXBプロバイダ]。リンク://webservices/jax-rs/download-xml-file-from-jax-rs-jaxb-resteasy/[Downlaod
JAX-RSのXMLファイル]