[解決済み】GSON - 日付形式
2022-04-14 02:44:43
質問
Gsonの出力にカスタム日付フォーマットを持たせようとしているのですが
.setDateFormat(DateFormat.FULL)
ではうまくいかないようで、同じように
.registerTypeAdapter(Date.class, new DateSerializer())
.
Gsonはオブジェクトの"Date"を気にせず、その通りにプリントしているようなものです。
どうすれば変更できますか?
ありがとうございます
EDIT
@Entity
public class AdviceSheet {
public Date lastModif;
[...]
}
public void method {
Gson gson = new GsonBuilder().setDateFormat(DateFormat.LONG).create();
System.out.println(gson.toJson(adviceSheet);
}
私はいつも
java.util.Date
;
setDateFormat()
は動作しません :(
解決方法は?
日付と時刻の両方に書式を定義するか、Stringベースの書式を使用する必要があるようです。例えば
Gson gson = new GsonBuilder()
.setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").create();
Gson gson = new GsonBuilder()
.setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
またはシリアライザーで行う。
フォーマッタはタイムスタンプを生成できないと思いますが、このシリアライザ/デシリアライザのペアは動作するようです。
JsonSerializer<Date> ser = new JsonSerializer<Date>() {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext
context) {
return src == null ? null : new JsonPrimitive(src.getTime());
}
};
JsonDeserializer<Date> deser = new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
return json == null ? null : new Date(json.getAsLong());
}
};
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, ser)
.registerTypeAdapter(Date.class, deser).create();
Java 8 以上をお使いの場合は、上記のシリアライザー/デシリアライザーを以下のようにお使いください。
JsonSerializer<Date> ser = (src, typeOfSrc, context) -> src == null ? null
: new JsonPrimitive(src.getTime());
JsonDeserializer<Date> deser = (jSon, typeOfT, context) -> jSon == null ? null : new Date(jSon.getAsLong());
関連
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Javaクラスローダーにソースコードから潜り込む
-
プロローグでのコンテンツは禁止されています
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
org.glassfish.jersey.servlet.ServletContainer
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
ローカルリソースのロードが許可されていない場合の解決策
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
javaの模造品QQ WeChatのチャットルーム
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
javaでよく使われる英単語
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] JSONの文字列をHashMapに変換する