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

南京企业网站开发费用申请网站优化搜索排名

南京企业网站开发费用申请,网站优化搜索排名,正在备案怎么建网站,网站建设推广平台1.什么是序列化? 在项目的开发中,为了让前端更好的分析后端返回的结果,我们一般会将返回的信息进行序列化,序列化就是将返回对象的状态信息转换为一种标准化的格式,方便在网络中传输也方便打印日志时号观察&#xff0…

1.什么是序列化?

在项目的开发中,为了让前端更好的分析后端返回的结果,我们一般会将返回的信息进行序列化,序列化就是将返回对象的状态信息转换为一种标准化的格式,方便在网络中传输也方便打印日志时号观察,反序列化就是将序列化后的对象还原成原来的对象信息。 

2.传统方式实现序列化 

1.1 对Object类进行序列化和反序列化

我们是通过ObjectMapper中提供的writeValueAsString()方法实现序列化,通过readValue方法实现反序列化。

代码示例:

@SpringBootTest
public class JacksonTest {@Testvoid JacksonTest() throws IOException {ObjectMapper objectMapper=new ObjectMapper();CommonResult<String> commonResult=CommonResult.error(500,"系统错误");//序列化String str=objectMapper.writeValueAsString(commonResult);System.out.println("序列化后:"+str);//反序列化CommonResult commonResult1 = objectMapper.readValue(str.getBytes(StandardCharsets.UTF_8), CommonResult.class);System.out.println("反序列化后:"+commonResult1);
}

运行代码

 

1.2 对List类进行序列化和反序列化

对List的序列化和对Object类的序列化方法一样,不过List类的反序列化需要多一步操作。

  

通过readValue方法的原码发现,第二个参数是Class类型。

由于Java的泛型在编译时会进行类型擦除,这意味着在运行时,泛型的具体类型信息只保留原始类型,例如List<CommonResult>中的CommonResult是通过泛型的形式传递的,编译时CommonResult里的具体信息就会被擦除,运行时就会被视为List,此时List类型中的CommonResult参数的信息可能会丢失或者欠缺了,如果直接将序列化后的List类型直接反序列化为原来的数据,可能会导致CommonResult类型信息丢失,从而引发问题。

所以,此时,我们要构建一个参数化类型,即带有泛型参数的具体类型,以上面为例,我们就需要构建一个List<CommonResult>的参数类型,这个通过下图方法实现

代码实现:

 

@SpringBootTest
public class JacksonTest {@Testvoid JacksonTest() throws IOException {ObjectMapper objectMapper=new ObjectMapper();  String str;//List的序列化List<CommonResult<String>> resultList= Arrays.asList(CommonResult.success("成功1"),CommonResult.success("成功2"));str=objectMapper.writeValueAsString(resultList);System.out.println("序列化后:"+str);//List的反序列化//构造一个带有泛型参数的具体类型JavaType javaType=objectMapper.getTypeFactory().constructParametricType(List.class,CommonResult.class);resultList=objectMapper.readValue(str,javaType);for(CommonResult result:resultList){System.out.println("反序列化后:"+result);}}

在这种实现方式中,我们需要主动处理writeValueAsString和readValue方法抛出的异常,这意味着我们每次调用这两个方法都要处理这两个方法抛出的异常,这是在有点麻烦切有点不美观,如果我们使用的是catch来捕捉异常,这样代码就会变得很难看。

3.模仿springboot原码中实现序列化和反序列化 

 

通过观察原码发现spring中的parseMap和ParseList都是通过tryParse方法来实现反序列化的,tryParse的原码如下图加分析

 

 

所以此时, 我们可以将原码中的tryParse方法复制一份我们模仿实现的代码中,并且用单例模式让ObjectMapper只能被构建一次。

package com.example.lotterysystem.common.utils;import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.json.JsonParseException;
import org.springframework.util.ReflectionUtils;import java.util.List;
import java.util.concurrent.Callable;public class JacksonUtil {//单例构造要私有Jackson的私有方法private JacksonUtil(){}//单例操作private static final ObjectMapper OBJECT_MAPPER;static {OBJECT_MAPPER=new ObjectMapper();}private static ObjectMapper getObjectMapper(){return OBJECT_MAPPER;}//有队tryParse方法进一步封装,将tryParse捕获的类型写死private static  <T> T tryParse(Callable<T> parser){return tryParse(parser, JacksonException.class);}private static  <T> T tryParse(Callable<T> parser, Class<? extends Exception> check) {try {return parser.call();} catch (Exception var4) {if (check.isAssignableFrom(var4.getClass())) {throw new JsonParseException(var4);}throw new IllegalStateException(var4);}}/*** 序列化方法* @param object* @return*/public static String writeValueAsString(Object object){return JacksonUtil.tryParse(()->{return JacksonUtil.getObjectMapper().writeValueAsString(object);});}/*** 反序列化Object类型数据* @param content* @param valueType* @param <T>* @return*/public static<T> T readValue(String content,Class<T> valueType){return JacksonUtil.tryParse(()->{return JacksonUtil.getObjectMapper().readValue(content,valueType);});}/*** 反序列化List类型* @param content* @param paramClasses* @param <T>* @return*/public static <T> T readListValue(String content,Class<?> paramClasses){JavaType javaType=JacksonUtil.getObjectMapper().getTypeFactory().constructParametricType(List.class,paramClasses);return JacksonUtil.tryParse(()->{return JacksonUtil.getObjectMapper().readValue(content,javaType);});}
}

测试代码

@Testvoid JacksonUtilTest(){CommonResult<String> result=CommonResult.success("成功");String str;//序列化str= JacksonUtil.writeValueAsString(result);System.out.println("序列化后:"+str);//反序列化result=JacksonUtil.readValue(str,CommonResult.class);System.out.println("反序列化后:"+result);System.out.println("下面是List序列化");//List的序列化List<CommonResult<String>> resultList= Arrays.asList(CommonResult.success("成功1"),CommonResult.success("成功2"));str=JacksonUtil.writeValueAsString(resultList);System.out.println("序列化后:"+str);//list的反序列化List<CommonResult<String>> results=JacksonUtil.readListValue(str,CommonResult.class);for(CommonResult son:results){System.out.println("反序列化后:"+son);}}

 

 


文章转载自:

http://qtmArbZ8.fsnhz.cn
http://Dpx7aYsS.fsnhz.cn
http://LrFzl1xo.fsnhz.cn
http://IImJGHYR.fsnhz.cn
http://cvwDwumL.fsnhz.cn
http://lulqcf8E.fsnhz.cn
http://T9tJ9zaY.fsnhz.cn
http://7vlsEel7.fsnhz.cn
http://7NnWwNuw.fsnhz.cn
http://3TUk8c8z.fsnhz.cn
http://lA8nxist.fsnhz.cn
http://f4EmAPSf.fsnhz.cn
http://tAaNDjCU.fsnhz.cn
http://ClvJX0KV.fsnhz.cn
http://GhHTJfr5.fsnhz.cn
http://SL7Psjd3.fsnhz.cn
http://sBEg9Mnh.fsnhz.cn
http://BQqYvnyg.fsnhz.cn
http://AKrpE4JG.fsnhz.cn
http://Z7h5WWGE.fsnhz.cn
http://EcmnD9dH.fsnhz.cn
http://JXpBkzcn.fsnhz.cn
http://2kzzNcBa.fsnhz.cn
http://TQlW2gKO.fsnhz.cn
http://NzcqGY9r.fsnhz.cn
http://yLNLwAIW.fsnhz.cn
http://vFiqSGL5.fsnhz.cn
http://2OmUte6N.fsnhz.cn
http://VAY6GaBr.fsnhz.cn
http://XeWp8jxQ.fsnhz.cn
http://www.dtcms.com/wzjs/768148.html

相关文章:

  • 交互网站设计wordpress 询价按钮
  • 揭阳网站建设公司哪个好模版网站建设步骤详解
  • 诚信企业品牌网站建设wordpress获取指定分类的图像描述
  • 网站建设专业用语wordpress 4 安装
  • 网站开发有什么好的论坛修改公司网站网页
  • 资源下载网站建设制作网站联系方式
  • 网站开发职业访谈百度seo公司哪家最好
  • 搭建网站架构是什么意思手机如何制作网页
  • 旅游网站模板免费下载网站模糊设计
  • 全国网站制作前十名国企设计公司有哪些
  • 怎样在手机上做自己的网站做网站需要那些编程语言
  • 宜兴网站优化网站建设报价流程
  • 想做一个个人网站怎么做郑州百度网站优化排名
  • 淘宝客推广网站建设百度云网站3级目录可以做导航分类么
  • 做视频网站什么平台好中国商标网商标查询官网查询
  • 甘肃省第九建设集团网站首页大连建设执业资格注册中心网站
  • 阳网站建设做网站 图片更好看
  • 做建筑看那些网站电子商务网站建设主题
  • 乌克兰网站设计推广企业网站最主要的方式
  • python做网站用什么框架网站开发朋友圈广告
  • 医院网站建设招标公告北京工商登记
  • 彩票系统网站开发成都做一个小企业网站需要多少钱
  • 网站申请了如何上传到服务器网站后台 教程
  • 安卓app整站织梦网站源码黑群晖 frp wordpress 访问
  • 化妆品网站开发的外文翻译python基础教程第3版
  • 怀化网站优化联系方式优斗网站建设
  • 太仓市住房和城乡建设局网站通用网站后台管理系统(php版)
  • 陕西建设 节水 官方网站域名和WordPress
  • 深圳网站建设的客户在哪里网站安全维护怎么做
  • 江苏分销网站建设姓氏头像在线制作免费生成图片