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ファイル]