1. 序章

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

2. Maven

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

<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およびgsonにあります。

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

3. エンティティの作成

Employee エンティティを作成してみましょう。このエンティティは、後でサーブレットからJSONとして返されます。

public class Employee {
	
    private int id;
    
    private String name;
    
    private String department;
   
    private long salary;

    // constructors
    // standard getters and setters.
}

4. エンティティからJSONへ

サーブレットからJSON応答を送信するには、最初にEmployeeオブジェクトをそのJSON表現に変換する必要があります。

オブジェクトをJSON表現に、またはその逆に変換するために使用できるJavaライブラリは多数あります。 それらの中で最も目立つのは、GsonライブラリとJacksonライブラリです。 GSONとJacksonの違いについては、この記事をご覧ください。

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応答を返すサーブレットの例を見てみましょう。

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

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