JSON WebService에 연결하는 Android 앱이 있습니다. 메서드 중 하나는 "flag-type"값에 대한 쉼표로 구분 된 문자열 목록, 즉 비트 마스크를 반환합니다. 예를 들어, "FileAppend, FileOverwrite"를 반환합니다. 이러한 유형의 나는 자바 열거가 java jackson json 프로세서 - RestTemplate에서 사용 - EnumSet 처리
enum FileMode { FileAppend, FileOverwrite, ... }
정의가 잭슨 디시리얼라이저가 자동으로 열거으로 JSON 페이로드에 반환 된 문자열 목록을 변환 할. 원시 열거 형 FileMode 및 EnumSet 시도했지만 두 경우 모두 deserialization 동안 예외가 발생합니다. deserializer가 deserialize하는 방법을 알 수 있도록 어떻게 든 주석을 달 수있는 방법이 있습니까?
@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 디시리얼라이저를 사용하여이 클래스를 직렬화 할 때 , 나는 상자의 예외가 org.codehaus.jackson.map.JsonMappingException있는 다음과 같은 예외를 가지고 : VALUE_STRING에서 java.util.EnumSet의 인스턴스를 직렬화 할 수 없습니다 토큰
수 있습니다 무엇 이유?
감사
어떤 종류의 예외입니까? '[ ""enum1 ","enum3 "]'과 같은 기본 JSON 문자열 목록은 값이 enum 값과 일치한다고 가정하고 정상적으로 작동합니다. – StaxMan
deserialized되는 예외 및 형식에 대한 자세한 정보를 제공했습니다. – cubesoft