私はJSON WebServiceに接続するAndroidアプリを持っています。メソッドの1つは、 "flag-type"値のコンマ区切り文字列リスト、つまりビットマスクを返します。たとえば、 "FileAppend、FileOverwrite"を返します。このタイプのために私はJavaの列挙型を持っているjava jackson json processor - RestTemplateでの使用 - EnumSetの処理
enum FileMode { FileAppend, FileOverwrite, ... }
を定義し、ジャクソンのデシリアライザは自動的に列挙にJSONペイロードに返される文字列のリストを変換したいです。私は生のEnum FileModeとEnumSetの両方を試しましたが、デシリアライズ中に両方のケースで例外が発生します。デシリアライザがデシリアライズする方法を知っているように、何とかアノテーションを付ける方法はありますか?
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonTypeName("AccessMask")
@JsonAutoDetect
public enum AccessMask {
None,
HideDateCreated,
HideDateModified,
HideDateTaken,
HideMetaData,
HideUserStats,
HideVisits,
NoCollections,
NoPrivateSearch,
NoPublicSearch,
NoRecentList,
ProtectExif,
ProtectXXLarge, // new in version 1.3
ProtectExtraLarge,
ProtectLarge,
ProtectMedium,
ProtectOriginals,
ProtectGuestbook, // new in version 1.1
NoPublicGuestbookPosts, // new in version 1.1
NoPrivateGuestbookPosts, // new in version 1.1
NoAnonymousGuestbookPosts, // new in version 1.1
ProtectComments, // new in version 1.1
NoPublicComments, // new in version 1.1
NoPrivateComments, // new in version 1.1
NoAnonymousComments, // new in version 1.1
PasswordProtectOriginals, // new in version 1.2
ProtectAll }
// and below is a property of a class defined below.
class Picture {
@JsonProperty("AccessMask")
EnumSet<AccessMask> accessMask;
}
アクセスマスクは、複数のフィールドセット(ビットマスク)を持つことができるビットフィールドです。私は、JSONのデシリアライザを使用して、このクラスをデシリアライズするとき は、私が 、ネストされた例外はorg.codehaus.jackson.map.JsonMappingExceptionで、次の例外が発生しました:VALUE_STRINGのうち、java.util.EnumSetのインスタンスをデシリアライズすることはできませんトークン
であるかもしれないもの理由?
よろしく
どのような例外がありますか? '["enum1"、 "enum3"]'のような基本的なJSON Stringリストは、値がenum値と一致すると仮定してうまくいくでしょう。 – StaxMan
デシリアライズされている例外と型に関する詳細情報を提供しました。 – cubesoft