栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用Jackson反序列化枚举

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Jackson反序列化枚举

编辑: 从Jackson
2.6开始,您可以

@JsonProperty
在枚举的每个元素上使用以指定其序列化/反序列化值(请参见此处):

public enum Status {    @JsonProperty("ready")    READY,    @JsonProperty("notReady")    NOT_READY,    @JsonProperty("notReadyAtAll")    NOT_READY_AT_ALL;}

(此答案的其余部分仍然适用于旧版本的Jackson)

您应该

@JsonCreator
用来注释接收
String
参数的静态方法。那就是杰克逊所谓的 工厂方法

public enum Status {    READY("ready"),    NOT_READY("notReady"),    NOT_READY_AT_ALL("notReadyAtAll");    private static Map<String, Status> FORMAT_MAP = Stream        .of(Status.values())        .collect(Collectors.toMap(s -> s.formatted, Function.identity()));    private final String formatted;    Status(String formatted) {        this.formatted = formatted;    }    @JsonCreator // This is the factory method and must be static    public static Status fromString(String string) {        return Optional .ofNullable(FORMAT_MAP.get(string)) .orElseThrow(() -> new IllegalArgumentException(string));    }}

这是测试:

ObjectMapper mapper = new ObjectMapper();Status s1 = mapper.readValue(""ready"", Status.class);Status s2 = mapper.readValue(""notReadyAtAll"", Status.class);System.out.println(s1); // READYSystem.out.println(s2); // NOT_READY_AT_ALL

正如工厂方法所期望的那样

String
,您必须对字符串使用JSON有效语法,该语法必须带有引号。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号