サーブレットからJSONレスポンスを返す

サーブレットからJSONレスポンスを返す

1. 前書き

このクイックチュートリアルでは、小さなWebアプリケーションを作成し、ServletからJSON応答を返す方法を探ります。

2. メーベン

ウェブアプリケーションの場合、javax.servlet-apiとGsonの依存関係をpom.xmlに含めます。


    javax.servlet
    javax.servlet-api
    ${javax.servlet.version}


    com.google.code.gson
    gson
    ${gson.version}

依存関係の最新バージョンは、javax.servlet-apiおよびgsonにあります。

また、アプリケーションをデプロイするサーブレットコンテナを設定する必要があります。 This articleは、TomcatにWARをデプロイする方法を開始するのに適した場所です。

3. エンティティの作成

後でServletから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応答を送信するには、最初にconvert the Employee object into its JSON representationに送信する必要があります。

オブジェクトをJSON表現に変換したり、その逆に変換するために使用できるJavaライブラリが多数あります。 それらの最も顕著なものは、GsonおよびJacksonライブラリです。 GSONとJacksonの違いについては、this articleをご覧ください。

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コンテナは、応答がコミットされた後、ヘッダーを設定または追加しようとする試みを無視します。

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

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アプリケーションで役立ちます。

ここに示されているすべてのコードサンプルはfound on GitHubにすることができます。