#初めに
今さらながらJavaでJacksonを用いたJSONのハンドリングを振り返ってみる。自分のプロジェクトの場合、JavaはほぼWebシステムであり、サーブレットとJavaScriptとの連携が肝になってくる。まずは、サーバからJSONを返すところを今回やってみた。Servletで実装している以外は、ほぼ参考文献の流用である。
#環境
- Java 1.8
- Tomcat 8.0.53
- Jackson 2.10.1
#ソース
JSON用Javaクラス作成
まずは、JSON化するために、それ用のオブジェクトを格納するためのJavaクラスの作成が必要になってくる。以下の通り、id(number型), name(string型), datas(配列)のプロパティを用意した。肝となるのは、@JsonPropertyによるアノテーションである。これがないと、例外が発生する。
package servletTest;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class JsonBean {
@JsonProperty("id")
private int id;
@JsonProperty("name")
private String name;
@JsonProperty("datas")
private List<String> datas;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setDatas(List<String> datas) {
this.datas = datas;
}
}
サーブレットの作成
前項で作成したJavaのクラス用いてオブジェクトを作成し、ObjectMapperクラスのwriteValueAsStringメソッドでJson文字列に変換し、クライアントへ返す。
package servletTest;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
// 参考 https://itsakura.com/java-jackson
@WebServlet("/helloworld")
public class ServletTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//Javaオブジェクトに値をセット
JsonBean jsonBean = new JsonBean();
jsonBean.setId(1);
jsonBean.setName("kimisyo");
List<String> datas = new ArrayList<>();
datas.add("Programmer");
datas.add("Data Scientist");
jsonBean.setDatas(datas);
ObjectMapper mapper = new ObjectMapper();
try {
//JavaオブジェクトからJSONに変換
String testJson = mapper.writeValueAsString(jsonBean);
//JSONの出力
response.getWriter().write(testJson);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
#実行結果
上記をEclipseで実行したところブラウザに以下の文字列が表示される。
{"id":1,"name":"kimisyo","datas":["Programmer","Data Scientist"]}
#おわりに
本来なら、Content-Typeなんかも設定した方がよいのだろうが、次回以降でやらざるを得ないと思われるので、先延ばしした。
次回以降(あればの話だが)は、以下の題目で進める予定である。
クライアント側で受け取ったJSONをJavaScriptで取得- クライアントから送ったJSONをサーバ側で取得
- JSON文字列の~~エスケープ、~~XSS対策
- HTMLにJSONを埋め込んでJavaScript から利用する(Java版)
#参考