GsonでjsonのタイムスタンプをDate型に変換

以下のようなResultsetのgetTimestamp()で取得したようなタイムスタンプを含むjsonを、GsonでDate型のフィールドを持つオブジェクトに変換する。

[
  {
    "id": "1",
    "date": "2022-07-18 20:01:54.0"
  }
  {
    "id": "2",
    "date": "2022-07-18 21:31:15.0"
  }
]

GsonBuilder

import java.util.Date;

public class SampleDTO {
	private int id;
	private Date date;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	public SampleDTO(int id, Date date) {
		this.id = id;
		this.date = date;
	}
}
InputStream in = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss.S").create();
JsonReader jr = new JsonReader(br);

Type listType = new TypeToken<List<SampleDTO>>() {
}.getType();

List<SampleDTO> messages = gson.fromJson(jr, listType);

Gson()の代わりにGsonBuilder()でインスタンスを生成し、.setDateFormat()でjsonのタイムフォーマットにあわせた指定をすることで、タイムスタンプをオブジェクトに変換できる。

参考