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 みたいな感じで日時を文字列で取得できます。