Slim3:modelToJsonでDate型を文字列にする

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


タグ GAE for Java, Java, slim3 | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です