サーブレットからJSONレスポンスを返す
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.エンティティを作成する
後で
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レスポンスを送信するには、まず
Employee
オブジェクトをそのJSON表現に変換する必要があります。
オブジェクトをJSON表現に変換したり、その逆に変換するために使用できるJavaライブラリーは数多くあります。それらの最も顕著なものはGsonとJacksonのライブラリです。 GSONとJacksonの違いについて学ぶためには、リンクを見てください:/jackson-vs-gson[この記事]。
Gsonを使ってオブジェクトをJSON表現に変換するための簡単なサンプルは次のようになります。
String employeeJsonString = new Gson().toJson(employee);
5.レスポンスとコンテンツタイプ
HTTPサーブレットの場合は、応答を生成するための正しい手順
-
応答から出力ストリームを取得する
-
レスポンスヘッダを記入
-
出力ストリームに内容を書き込む
-
応答をコミットする
応答では、
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]です。