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

杰克逊:反序列化到地图 每个值的类型正确

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

杰克逊:反序列化到地图 每个值的类型正确

我认为实现所需目标的最简单方法是使用:

ObjectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

这将在序列化的json中添加类型信息。

这是一个正在运行的示例,您需要适应于Spring:

public class Main {    public enum MyEnum {        enumValue1    }    public static void main(String[] args) throws IOException {        ObjectMapper mapper = new ObjectMapper();        MyClass obj = new MyClass();        obj.setContext(new HashMap<String, Object>());        obj.setVal1("foo");        obj.setVal2("var");        obj.getContext().put("key1", "stringValue1");        obj.getContext().put("key2", MyEnum.enumValue1);        obj.getContext().put("key3", 3.0);        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);        String json = mapper.writerWithDefaultPrettyPrinter().writevalueAsString(obj);        System.out.println(json);        MyClass readValue = mapper.readValue(json, MyClass.class);        //Check the enum value was correctly deserialized        Assert.assertEquals(readValue.getContext().get("key2"), MyEnum.enumValue1);    }}

该对象将被序列化为类似于以下内容的对象:

[ "so_27871226.MyClass", {  "val1" : "foo",  "val2" : "var",  "context" : [ "java.util.HashMap", {    "key3" : 3.0,    "key2" : [ "so_27871226.Main$MyEnum", "enumValue1" ],    "key1" : "stringValue1"  } ]} ]

并且将正确反序列化,并且断言将通过。

顺便说一下,还有更多的方法可以做到这一点,请查看https://github.com/FasterXML/jackson-
docs/wiki/JacksonPolymorphicDeserialization
了解更多信息。

希望对您有所帮助。



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

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

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