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

网站快速被百度收录asp.net网站配置文件

网站快速被百度收录,asp.net网站配置文件,社区网站建设方案书,公司网站建设的分类Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TyperReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。 Jackson ObjectMapper的readVa…

Jackson是一个比较流行的Json序列化和反序列化框架。本文以Jackson为例介绍TypeReference实现涉及泛型的反序列化,及TyperReference的实现原理。对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。

Jackson ObjectMapper的readValue可以将Json字符串反序列化为Java对象。

例:如将下列Json串反序列化为List<UserResource>类型。

Json串:

[{"id":null,"name":" ","age":500,"gender":false,"email":"email","employed":true,"salary":10}
]

UserResource实体类:

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserResource {private UUID id;private String name;private int age;private boolean gender;private String email;private boolean employed;private BigDecimal salary;
}

1)理想的实现方式:

理想的实现方式是告诉ObjectMapper的readValue方法,我要的是List<UserResource>,帮我反序列化成这个类型。

List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, List<UserResource>.class);

现实的编译器告诉你这不行,Cannot select from parameterized type. 也很好理解,Java编译器认为List是Class,而List则不是。

2)换一种实现方式

既然不能用List<Resource>.class,那如果我告诉ObjectMapper的readValue方法,我要的是LIst类型,但返回值类型是List<UserResource>,会发生什么呢?

List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, List.class);

这时候倒没有编译错误,但是会有警告:Unchecked assignment: 'java.util.List' to 'java.util.List<UserResource>',显然ObjectMapper并不能反序列化为UserResource类型,而是LinkedHashMap类型。如下图所示:

在这里插入图片描述
3)TypeReference的实现方式

ObjectMapper提供了readValue(String content, TypeReference valueTypeRef)接口,第二个参数为new一个TypeReference的子类实例:new TypeReference<List<UserResource>>(){}。泛型抽象类TypeReference用于通过子类获取完整的泛型类型信息。

在这里插入图片描述

List<UserResource> list = new ObjectMapper().readValue(userResourcesStr, new TypeReference<List<UserResource>>(){});

在这里插入图片描述
4)TypeReference实现原理

上例中new TypeReference<List<UserResource>>(){}子类的实例,TypeReference源码部分比较简单,主要逻辑是,通过getClass().getGenericSuperclass();获取父类中的参数化类型(ParameterizedType)。

这部分不清楚可以看:Java 中的Type类型及其实现【学习记录】

TypeReference主要源码:

protected TypeReference()
{Type superClass = getClass().getGenericSuperclass();_type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}

getGenericSuperclass返回一个Type类型的对象,代表实体(class,interface,primitive type or void)的直接父类,如果父类是参数化类型,则返回的Type对象可准确反应源码中使用的实际type参数。

Class的genericInfo:

在这里插入图片描述
5)总结:

  • Jackson ObjectMapper 提供了TypeReference支持对泛型对象的反序列化;
  • 对于获取泛型类型信息的场景,TypeReference是一个可以参考的通用解决方案。
http://www.yayakq.cn/news/234856/

相关文章:

  • 公司注销后 网站备案外贸网站搭建推广
  • 网站建设实验分析网站建设可行性
  • 广饶网站设计thinkphp企业网站系统
  • 网站招聘栏怎么做seo排名点击器原理
  • 白云区网站建设mg126包装设计网站是什么样子的
  • 网站名称管理个旧市建设网站
  • 云阳如何做网站如何推广自己成为网红
  • 多用户网站管理系统wordpress简介
  • 文山做网站的地方网站关键词优化办法
  • 网站备案被恶意注销58同城找房子租房
  • 解析域名就可以做网站宁波外客网络科技有限公司
  • 台州企业做网站网站没有备案 合法吗
  • 网站建设图片教程视频苏州企业建设网站公司
  • 简单个人网站欣赏国外出名设计网站有哪些
  • 徐州手机网站优化公司前端开发语言的特点是
  • 影楼手机网站设计医院网站建设需要注意什么
  • 手机端网站变成wap个人博客网站建设预算
  • 绿植租摆网站建设惠州免费自助建站模板
  • 淘宝 网站开发 退货建设局网站投诉开发商
  • 网站建设需要经过哪几个步骤国际域名注册费用
  • 雅安交通建设集团网站给wordpress首页添加公告栏
  • 下列关于网站开发网页上传兰州做网站公司有哪些
  • 北辰做网站公司深圳域名服务器地址
  • 石家庄住房和城乡建设局官方网站免费外贸网站有哪些
  • 网站开发相关外文书籍深圳网站制作网站建设怎么制作网站深圳博纳
  • 建设银行嘉兴分行网站首页怎样做投资理财网站
  • 网站推广具体内容网站未备案被阻断怎么做
  • 焦作建设网站的公司合肥做网站排名
  • 网站开发一个月商丘网站建设推广公司
  • 营销类网站设计 要点网站目标