1.はじめに

このクイックチュートリアルでは、小さなWebアプリケーションを作成し、

Servlet

からJSONレスポンスを返す方法を探ります。

2. Maven

Webアプリケーションの場合、

pom.xml



javax.servlet-api

とGsonの依存関係を含めます。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>${javax.servlet.version}</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>${gson.version}</version>
</dependency>

依存関係の最新バージョンはここにあります。


javax.servlet-api

およびhttps://search.maven.org/クラシック/#検索%7Cga%7C1%7Ca%3A%22gson%22%20g%3A%22com.google.code.gson%22[gson]

アプリケーションをデプロイするサーブレットコンテナも設定する必要があります。

この記事

は、TomcatにWARをデプロイする方法を説明するのに良い場所です。

3.エンティティを作成する

後で

S​​ervlet

からJSONとして返される

Employee

エンティティを作成しましょう。

public class Employee {

    private int id;

    private String name;

    private String department;

    private long salary;

   //constructors
   //standard getters and setters.
}

4. JSONの実体


Servlet

からJSONレスポンスを送信するには、まず

Employee

オブジェクトをそのJSON表現に変換する必要があります。

オブジェクトをJSON表現に変換したり、その逆に変換するために使用できるJavaライブラリーは数多くあります。それらの最も顕著なものはGsonとJacksonのライブラリです。 GSONとJacksonの違いについて学ぶためには、リンクを見てください:/jackson-vs-gson[この記事]。

Gsonを使ってオブジェクトをJSON表現に変換するための簡単なサンプルは次のようになります。

String employeeJsonString = new Gson().toJson(employee);

5.レスポンスとコンテンツタイプ

HTTPサーブレットの場合は、応答を生成するための正しい手順

  1. 応答から出力ストリームを取得する

  2. レスポンスヘッダを記入

  3. 出力ストリームに内容を書き込む

  4. 応答をコミットする

応答では、

Content-Type

ヘッダーが、返されたコンテンツのコンテンツタイプが実際にはどのようなものかをクライアントに通知します。

JSONレスポンスを生成するためには、コンテンツタイプは__application/jsonにする必要があります。

PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();

  • レスポンスヘッダはレスポンスがコミットされる前に必ず設定されなければなりません。

レスポンスがコミットされた後、Webコンテナはヘッダを設定または追加しようとする試みを無視します


PrintWriter



flush()

を呼び出すと、応答がコミットされます。

6.サーブレットの例

では、JSONレスポンスを返す

Servlet

の例を見てみましょう。

@WebServlet(name = "EmployeeServlet", urlPatterns = "/employeeServlet")
public class EmployeeServlet extends HttpServlet {

    private Gson gson = new Gson();

    @Override
    protected void doGet(
      HttpServletRequest request,
      HttpServletResponse response) throws IOException {

        Employee employee = new Employee(1, "Karan", "IT", 5000);
        String employeeJsonString = this.gson.toJson(employee);

        PrintWriter out = response.getWriter();
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        out.print(employeeJsonString);
        out.flush();
    }
}

7.まとめ

この記事では、サーブレットからJSONレスポンスを返す方法について説明しました。

これは、サーブレットを使用してRESTサービスを実装するWebアプリケーションで役立ちます。

ここに示されているすべてのコードサンプルはhttps://github.com/eugenp/tutorials/tree/master/javax-servlets[found on GitHub]です。