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

临沂市网站建设_网站建设公司_定制开发_seo优化

服装网站栏目,网络营销就是网络销售,数据网站建设,做网站导航按钮怎么猛一、前言 在阿里编码规约中#xff0c;有一个约定如下 【强制】POJO 类中的任何布尔类型的变量#xff0c;都不要加 is 前缀#xff0c;否则部分框架解析会引起序列 化错误。 但为什么类中的field不能用is开头呢#xff1f;本文将从问题演示、框架源码#xff08;本文使用…一、前言 在阿里编码规约中有一个约定如下 【强制】POJO 类中的任何布尔类型的变量都不要加 is 前缀否则部分框架解析会引起序列 化错误。 但为什么类中的field不能用is开头呢本文将从问题演示、框架源码本文使用的Jackson两个方面来进行阐述。 二、问题演示 本文使用的Jackson需要引入相关依赖maven依赖如下gradle配置请自行寻找。 dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.11.0/version /dependency首先写一个简单的POJO在这个POJO中有三个属性分别是isSuccess/code/msg并自动生成了对应的get方法这里要注意isSuccess属性对应的get方法名也是isSuccess()。代码如下 public class Pojo {private boolean isSuccess;private int code;private String msg;private Pojo(boolean success, int code, String msg) {this.isSuccess success;this.code code;this.msg msg;}public static Pojo buildSuccess() {return new Pojo(true, 2000, success);}public boolean isSuccess() {return isSuccess;}public int getCode() {return code;}public String getMsg() {return msg;}Overridepublic String toString() {return Pojo{ isSuccess isSuccess , code code , msg msg \ };} }然后再写一个类在这个类中测试对POJO的序列化。在主函数中会先创建一个POJO然后将其打印接着会使用Jackson中的ObjectMapper将对象序列化成Json字符串并打印。 public class Main {public static void main(String[] args) {ObjectMapper mapper new ObjectMapper();Pojo pojo Pojo.buildSuccess();System.out.println(raw pojo1: pojo.toString());try {System.out.println(serialize pojo1: mapper.writeValueAsString(pojo));} catch (IOException e) {System.out.println(e);}} }执行main()方法后得到运行结果如下图 可以发现使用ObjectMapper对象将POJO序列化成String后输出的变量名是success而原有POJO中的变量isSuccess丢失。将该Json串反序列化成对象会出现问题。 三、源码解析 // TODO 待源码大致读懂后再补充 源码看不太懂只讲解一下核心的流程。由于Jackson扩展性很好对各种复杂情况都进行了处理这里只讲解最普通的分支流程。 主要方法是POJOPropertiesCollector#collectAll() protected void collectAll(){LinkedHashMapString, POJOPropertyBuilder props new LinkedHashMapString, POJOPropertyBuilder();// First: gather basic data_addFields(props); // note: populates _fieldRenameMappings_addMethods(props);// 25-Jan-2016, tatu: Avoid introspecting (constructor-)creators for non-static// inner classes, see [databind#1502]if (!_classDef.isNonStaticInnerClass()) {_addCreators(props);}// Remove ignored properties, first; this MUST precede annotation merging// since logic relies on knowing exactly which accessor has which annotation_removeUnwantedProperties(props);// and then remove unneeded accessors (wrt read-only, read-write)_removeUnwantedAccessor(props);// Rename remaining properties_renameProperties(props);// and now add injectables, but taking care to avoid overlapping ones// via creator and regular properties_addInjectables(props);// then merge annotations, to simplify further processing// 26-Sep-2017, tatu: Before 2.9.2 was done earlier but that prevented some of// annotations from getting properly mergedfor (POJOPropertyBuilder property : props.values()) {property.mergeAnnotations(_forSerialization);}// And use custom naming strategy, if applicable...PropertyNamingStrategy naming _findNamingStrategy();if (naming ! null) {_renameUsing(props, naming);}// Sort by visibility (explicit over implicit); drop all but first of member// type (getter, setter etc) if there is visibility differencefor (POJOPropertyBuilder property : props.values()) {property.trimByVisibility();}// and, if required, apply wrapper name: note, MUST be done after// annotations are merged.if (_config.isEnabled(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME)) {_renameWithWrappers(props);}// well, almost last: theres still ordering..._sortProperties(props);_properties props;_collected true;}四、结论 通过上述论证我们不难发现类中的属性用is开头会导致对象序列化后产生意想不到的结果。所以在平时编码的过程中我们不能在类变量中用is开头如: “isSuccess”这样容易造成程序错误。 如果情况特殊也不必墨守成规只是需要预先判断可能产生的影响、影响范围、能否监控等问题。更特殊的情况你可以将变量名定义为isIsSuccess或者将isSuccess定义为public。
http://www.ihoyoo.com/news/53673.html

相关文章:

  • 濮阳建站推广哪家好野马视觉传媒网站建设
  • 楼盘网站模板保定网站建设价格低
  • html5手机网站开发视频教程盐城网站制作哪家好
  • 洛阳网站建设找汉狮网页设计师个人网站
  • 常州企业自助建站系统昆明做网站要多少钱
  • vs 手机网站开发广告软文范例200字
  • 菏泽做网站的公司网站建设 网站推广
  • 网站开发和软件开发有什么区别做淘客网站 备案
  • 哪个网站做职客比较好 比较正规2021年年度关键词排名
  • 徐家汇网站建设网站建设商标保护
  • 青岛网站制作公司网络微网站样式
  • 专业版装修用什么网站做导航条服装定制行业的未来和趋势
  • 高校保卫处网站建设工作总结中文的网站做不成二维码
  • 网站是否有管理员权限盘锦网站建设
  • 新网站怎么发外链昆明智能建站
  • 生活门户网站开发方案编写网页所用的语言是
  • 专门做任务的网站设计网页制作与
  • 怎么分析竞争对手网站云盘网站建设
  • 苏州家教网站建设做公司网站客户群体怎么找
  • 怎么把服务器做网站百度竞价网站备案
  • 重庆一次可以备案多少个网站网站开发的经济可行性分析
  • 有些中小网站汕头做网站的公司
  • 网站被备案能建设wordpress可以建官网嘛
  • 怎么用图片做网站背景图地方网站商城怎么做
  • 中山专业外贸网站建设wordpress中文 插件
  • 做地方特产的网站百度网页版主页
  • 高端企业网站报价wordpress插件怎么使用教程
  • 做蛋糕的英文网站logo设计在线生成免费免费设计logo生成器
  • 如何编写网站泉州市建设局网站公示
  • 贵州网推传媒有限公司网站seo快速排名优化的软件