У меня есть приложение для Android, которое подключается к JSON WebService. Один из методов возвращает список строк, разделенных запятыми, для значения типа флага, другими словами, битовую маску. Например, он возвращает «FileAppend, FileOverwrite». Для этого типа у меня определено перечисление java
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;
}
AccessMask - это битовое поле, означающее, что в нем может быть установлено несколько полей (битовая маска).
Когда я десериализовал этот класс с помощью JSON deserializer, я получил следующее исключение
вложенным исключением является org.codehaus.jackson.map.JsonMappingException: невозможно десериализовать экземпляр java.util.EnumSet из маркера VALUE_STRING
В чем может быть причина?
Привет