LoginSignup
2
6

More than 3 years have passed since last update.

JavaとJacksonでJSON その①サーバからJSONを返す

Last updated at Posted at 2019-12-31

初めに

今さらながら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によるアノテーションである。これがないと、例外が発生する。

JsonBean.java
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文字列に変換し、クライアントへ返す。

SetvletTest.java
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版)

参考

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6