当前位置: 首页 > news >正文

企业网站管理系统如何使用说明/国内新闻最新消息今天简短

企业网站管理系统如何使用说明,国内新闻最新消息今天简短,台式机做网站服务器,百度快照查询入口使用ObjectMapper对含有任意key的JSON进行反序列化 在调用某个RESTful API后,返回的JSON字符串中含有没有预先定义的key,和结构固定的JSON相比,它需要一些额外的操作。 对于结构固定的JSON,使用ObjectMapper结合某个预先定义的实…

使用ObjectMapper对含有任意key的JSON进行反序列化

在调用某个RESTful API后,返回的JSON字符串中含有没有预先定义的key,和结构固定的JSON相比,它需要一些额外的操作。

对于结构固定的JSON,使用ObjectMapper结合某个预先定义的实体类型可以非常方便地完成反序列化工作,比如对下面这样的JSON:

GET /person/1{"id": "1","name": "dm_vincent","age": "28"
}

结合一个实体类型,可以很轻松的完成反序列化工作:

public class Person {public long id;public String name;public int age;
}
public static <T> T getEntity(String jsonString, Class<T> prototype) {ObjectMapper objectMapper = new ObjectMapper();try {return (T) objectMapper.readValue(jsonString, prototype);} catch (IOException e) {e.printStackTrace();}return null;}

但是在某些支持一次性获取多条记录的API中,就出现问题了。比如拥有下面这种格式的API:

GET /person/1,2,3{"dm_vincent": {"id": "1","name": "dm_vincent","age": "28"},"dm_vincent2": {"id": "2","name": "dm_vincent2","age": "29"},"dm_vincent3": {"id": "3","name": "dm_vincent3","age": "30"}
}

虽然需要获取的实体类型还是那个Person类,可是这个时候就不像上面那样简单明了了。比如下面这段代码在反序列化的时候会出现问题:

public class PersonWrapper {public Map<String, Person> persons;
}

我们的意图是明确的,将返回的多个Person实体对象放到一个Map结构中。但是问题就在于返回的JSON中的keys是不固定的(比如上述JSON中的keys是人名),这导致反序列化失败。毕竟默认配置下的ObjectMapper也没有聪明到这种程度,能够猜测你是想要将多个实体放到Map中。

正确的做法之一是使用ObjectMapper的readTree方法:

public static <T> EntityWrapper<T> getEntityWrapper(String jsonString, Class<T> prototype) {ObjectMapper objectMapper = new ObjectMapper();EntityWrapper<T> wrapper = new EntityWrapper<T>();try {JsonNode root = objectMapper.readTree(jsonString);Iterator<Entry<String, JsonNode>> elements = root.fields();while (elements.hasNext()) {Entry<String, JsonNode> node = elements.next();String key = node.getKey();T element = objectMapper.readValue(node.getValue().toString(), prototype);wrapper.addEntry(key, element);}return wrapper;} catch (IOException e) {e.printStackTrace();}return null;}

简单解释一下上述代码:

使用root.field()方法能够得到返回的JSON中的所有key-value对。
然后循环提取某个键值对的key和value,对于value我们可以直接使用之前的策略进行反序列化,因为这部分的结构也是固定的。


忽略不需要的字段

有时候,返回的JSON字符串中含有我们并不需要的字段,那么当对应的实体类中不含有该字段时,会抛出一个异常,告诉你有些字段没有在实体类中找到。解决办法很简单,在声明ObjectMapper之后,加上上述代码:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
http://www.jmfq.cn/news/4834603.html

相关文章:

  • 网站建设颜色/在线制作网站免费
  • 顺的网站建设信息/关键词怎么选择技巧
  • 全功能多国语言企业网站/关键词排名优化技巧
  • 郑州建设银行网站房贷网点在哪/北京网络网站推广
  • 可以浏览国外网站/百度seo竞价推广是什么
  • 如何做优酷网站赚钱/引擎优化是什么工作
  • 大家称赞的网站建设/全国前十名小程序开发公司
  • 天津酒店网站制作/百度免费安装
  • 网站建设模板是什么意思/登封网络推广
  • 福建建设工程环保备案网站入口/无线新闻台直播app下载
  • 做详情页比较好的网站/怎么创建网站快捷方式到桌面
  • 在中国可以做国外的域名网站吗/武汉seo网站推广
  • 微信公众号管理平台app/杭州seo按天计费
  • 做网站秒杀软件用什么语言好/青岛新闻最新今日头条
  • 有什么网站有小学生做的题目/河北百度seo关键词
  • 济南学网站建设哪里好/湖南seo网站多少钱
  • 去哪找做塑料的网站/足球世界积分榜
  • 免费微信网站开发/网络营销外包推广
  • 模板建站优点/网站建设报价单
  • 建德网站建设公司/品牌网络营销策划
  • 网站模板素材下载/优化seo是什么意思
  • 怎么做自己的网站logo/推广app大全
  • 网站加速工具/网络营销产品策略的内容
  • 水利部网站 生产建设项目/网络营销案例分析题及答案
  • 做网站推广弊端/it培训班学出来有用吗
  • wordpress琪亚娜/上海专业seo排名优化
  • 大连品牌网站建设公司/网络推广网站排行榜
  • 网站开发自学/seo关键词优化服务
  • 电商网站设计思想/百度竞价推广思路
  • 玛迪做网站/网络营销策划书800字