modelToJsonメソッドを使うと、modelクラスをそのままJSONに変換してくれるので、すごく便利なんですが、それはあくまでわかりやすい型のもので(ここでいうわかりやすい型ってのはニュアンスで悟ってください)、Date型はどうもUnixTimeになっているみたい。そんなの求めてないって!
ということで、人にわかりやすい文字列に変換する方法です。
参考URL:
Slim3 JSON機能の説明(非公式)
まずはmodel。ここではCommentクラスというものにしてます。
説明では必要個所のみに絞ってますのでよろしく。
アノテーションで、modelToJsonする場合に使われるcoderクラスを指定します。
ここでは、DateCoder.classというものにしています。
@Model(schemaVersion = 1)
public class Comment implements Serializable {
// 略
@Attribute(json=@Json(coder=DateCoder.class))
private Date created = new Date();
@Attribute(json=@Json(coder=DateCoder.class))
private Date updated;
// 略
}
次に、DateCoder.javaです。
org.slim3.datastore.json.Defaultを継承して作ります。
public class DateCoder extends Default {
@Override
public void encode(JsonWriter writer, Date value) {
TimeZone.setDefault(TimeZone.getTimeZone("JST"));
writer.writeString(value != null ? DateUtil.toString(value, "yyyy/MM/dd HH:mm:ss") : "");
}
}
このようにすることで、例えばjQueryとかでJSONを受け取った場合に、json.createdと指定するだけで、2011/08/05 10:11:23 みたいな感じで日時を文字列で取得できます。
