[解決済み】Jackson enumのシリアライズとデシリアライザー
2022-04-05 03:46:56
質問
JAVA 1.6とJackson 1.9.9を使っていて、あるenumがあるんです。
public enum Event {
FORGOT_PASSWORD("forgot password");
private final String value;
private Event(final String description) {
this.value = description;
}
@JsonValue
final String value() {
return this.value;
}
}
私は@JsonValueを追加しました、これはオブジェクトをシリアライズする仕事をするようです。
{"event":"forgot password"}
が、デシリアライズしようとすると
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of com.globalrelay.gas.appsjson.authportal.Event from String value 'forgot password': value not one of declared Enum instance names
何が足りないのでしょうか?
解決方法は?
で指摘されたシリアライザー/デシリアライザーの解決策は xbakesx を完全に切り離したい場合は、優れた方法です。 列挙 クラスとその JSON 表現を分離します。
また、自己完結型のソリューションがお好みであれば、以下のように
@JsonCreator
と
@JsonValue
のアノテーションがあれば、より便利です。
での例を活用して スタンレー 以下は、完全な自己完結型のソリューションです (Java 6、Jackson 1.9)。
public enum DeviceScheduleFormat {
Weekday,
EvenOdd,
Interval;
private static Map<String, DeviceScheduleFormat> namesMap = new HashMap<String, DeviceScheduleFormat>(3);
static {
namesMap.put("weekday", Weekday);
namesMap.put("even-odd", EvenOdd);
namesMap.put("interval", Interval);
}
@JsonCreator
public static DeviceScheduleFormat forValue(String value) {
return namesMap.get(StringUtils.lowerCase(value));
}
@JsonValue
public String toValue() {
for (Entry<String, DeviceScheduleFormat> entry : namesMap.entrySet()) {
if (entry.getValue() == this)
return entry.getKey();
}
return null; // or fail
}
}
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?
-
[解決済み] enumを列挙するには
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] Jackson を使用してオブジェクトの配列をデシリアライズする方法
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
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でFileFilterを作るには?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] 一部の入力ファイルが非推奨のAPIを使用またはオーバーライドしている
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] 1行目2列目でBEGIN_ARRAYを期待したが、BEGIN_OBJECTだった。
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] Eclipseでクラスとそれに対応するファイルの名前を変更する方法は?