レスポンスの形式

【前提条件】

[環境]
[JAX-RSの設定]
  • @ApplicationPath("/service")

【概要】

JAX-RSでのレスポンスの返却です。
サンプルではHTML形式、JSON形式、XML形式で
レスポンスを返却します。

【サービスクラス】

package jp.glory.ui.service;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import jp.glory.ui.service.response.TestResponseBean;

@Path("produce")
public class ProduceService {

    @POST
    @Path("html")
    @Produces(MediaType.TEXT_HTML)
    public String getByHtml() {

        StringBuilder builder = new StringBuilder();

        builder.append("<html>");
        builder.append("<head>");
        builder.append("<title>サンプル</title>");
        builder.append("</head>");
        builder.append("<body>");
        builder.append("<font color='red'>TEST</font>");
        builder.append("</body>");
        builder.append("</html>");

        return builder.toString();
    }

    @POST
    @Path("json")
    @Produces(MediaType.APPLICATION_JSON)
    public TestResponseBean getByJson() {

        TestResponseBean response = new TestResponseBean();

        response.setName("Hoge");
        response.setYear(1986);

        return response;
    }

    @POST
    @Path("xml")
    @Produces(MediaType.APPLICATION_XML)
    public TestResponseBean getByXml() {

        TestResponseBean response = new TestResponseBean();

        response.setName("Hoge");
        response.setYear(1986);

        return response;
    }
}

Producesアノテーション
返却するレスポンスの形式を指定します。

HTML形式ではHTMLを作成しています。
(こういうやり方はやらないと思いますが、サンプルなので・・・)

JSON形式、XML形式では
独自に作成したBeanを返却しています。

【レスポンスBean】

package jp.glory.ui.service.response;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "response")
public class TestResponseBean {

    private String name = null;

    private Integer year = null;

    public String getName() {
        return name;
    }

    public void setName(final String name) {
        this.name = name;
    }

    public Integer getYear() {
        return year;
    }

    public void setYear(final Integer year) {
        this.year = year;
    }

}

JSON形式、XML形式では
レスポンス用にBeanを返却していました。

返却するBeanには
javax.xml.bind.annotation.XmlRootElementアノテーションをつける必要があります。

XmlRootElementアノテーション
クラスをXML要素にマッピングするためのアノテーションです。

XMLの場合、XmlRootElementで指定した値が
返却されたXMLのルートタグ名となります。

【サンプル実行ページ】

<html>
    <head>
        <title>JAX-RSサンプル</title>
        <style type="text/css">
            .area {
                margin-bottom: 20px;
            }
        </style>
    </head>
    <body>
        <div class="area" >
            <form action="../service/produce/html" method="post">
                <input type="submit"  value="HTML Response"/>
            </form>
        </div>
        <div class="area" >
            <form action="../service/produce/json" method="post">
                <input type="submit"  value="JSON Response"/>
            </form>
        </div>
        <div class="area" >
            <form action="../service/produce/xml" method="post">
                <input type="submit"  value="XML Response"/>
            </form>
        </div>
    </body>
</html>