gpt4 book ai didi

java jackson json 处理器 - 在 RestTemplate 中使用 - EnumSet 的处理

转载 作者:行者123 更新时间:2023-12-01 15:45:53 25 4
gpt4 key购买 nike

我有一个连接到 JSON WebService 的 Android 应用程序。其中一种方法返回“标志类型”值的逗号分隔字符串列表,换句话说,是位掩码。例如,它返回“FileAppend,FileOverwrite”。对于这种类型,我定义了一个 java 枚举

enum FileMode { FileAppend, FileOverwrite,   ... } 

并希望 Jackson 反序列化器自动将 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 反序列化器反序列化此类时,出现以下异常嵌套异常是 org.codehaus.jackson.map.JsonMappingException:无法反序列化 VALUE_STRING token 之外的 java.util.EnumSet 实例

可能是什么原因?

问候

最佳答案

如果值(如错误消息所示)只是一个 JSON 字符串,而不是预期的字符串数组,则您需要编写一个自定义反序列化器。但为什么这些不序列化为 JSON 数组,并将枚举值作为单独的字符串呢? Jackson 会在没有任何注释的情况下自动处理这个问题(不需要您添加的任何注释,我假设添加它们是为了让事情正常工作?)。

您可以直接在字段 (@JsonDeserialize(using=MyDeserializer.class)) 上注册反序列化器,也可以通过注册该类型的反序列化器来注册。

关于java jackson json 处理器 - 在 RestTemplate 中使用 - EnumSet 的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com