保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

Fastjson妙用之JSONField注解

  在开发的过程中使用json格式的地方非常多,现在前后端分离的项目中,前后端数据交换的格式一般为json,这种格式的优缺点这里不再赘述,感兴趣的可以百度。把java中的实体类序列化为json的方式也有很多方式,今天来看看常用到的fastjson。
  都知道fastjson是阿里开源的一个序列化反序列化的jar包,在日常的开发过程中经常会碰到,也是使用频率较高的一款工具。
  这里要了解一个概念,那就是序列化反序列化,序列化是把一个java对象转化为其他的形式,如json、XML、对象字节;反序列化则是把json、XML、对象字节转化为java对象。一、初识Fastjson1、环境搭建
  要想使用fastjson,首先需要引入fastjson的包,我这里使用的是maven工具,所以这里只要在pom文件中添加相应的依赖即可,!fastjsondependencygroupIdcom。alibabagroupIdfastjsonartifactIdversion1。2。78versiondependency2、一个小例子
  有一个实体类,packagecom。atssg。test;importlombok。Data;DatapublicclassStudent{privateIntegerid;privateStringname;privateStringaddress;privateStringphoneNumber;}
  下面看测试方法packagecom。atssg。test;importcom。alibaba。fastjson。JSON;importlombok。extern。slf4j。Slf4j;Slf4jpublicclassTestFastJson{publicstaticvoidmain(String〔〕args){StudentstudentnewStudent();student。setId(1);student。setName(tom);student。setAddress(beijing);student。setPhoneNumber(0106668899);把对象转化为json串StringjsonStringJSON。toJSONString(student);log。info(student序列化为:{},jsonString);}}
  下面看测试结果22:22:41。657〔main〕INFOcom。atssg。test。TestFastJsonstudent序列化为:{address:beijing,id:1,name:tom,phoneNumber:0106668899}Processfinishedwithexitcode0
  从上面可以看到打印除了序列化为json的字符串,这里是一个序列化的过程,当然也可以把一个字符串反序列化为java对象。二、JSONField注解
  在上面的例子中,student被序列化为一个json字符串,字符串是键值对的形式,键是Student的属性名。
  现在有这样的一个需求,要返回给前端Student的json字符串,但不想给前端phoneNumber字段,你要怎么做那?一个比较容易想到的方式是从字符串中把这个属性去掉,或者重新生成一个不包含phoneNumber的实体对象。难道没有更好的方式么
  在fastjson提供了JSONField这样一个注解。1、JSONField(serializefalse)
  JSONField注解中有seaialize这样一个属性,看名称应该和序列化有关,尝试下看看效果,packagecom。atssg。test;importcom。alibaba。fastjson。annotation。JSONField;importlombok。Data;DatapublicclassStudent{privateIntegerid;privateStringname;privateStringaddress;JSONField(serializefalse)privateStringphoneNumber;}
  再看上面的测试类的执行结果,22:30:26。678〔main〕INFOcom。atssg。test。TestFastJsonstudent序列化为:{address:beijing,id:1,name:tom}Processfinishedwithexitcode0
  可以看到轻轻松松phoneNumber不见了,也就是说JSONField(serializefalse)起作用了,该属性不会参与序列化,反之,不加该注解或serialize的值设为true,则会参与序列化。2、JSONField(nameXXX)
  在和前端的交互过程中,可能存在这样的情况,java类中定义的字段的形式为驼峰,但前端需要的是以连接的形式,要怎么做那,在JSONField中有name属性,packagecom。atssg。test;importcom。alibaba。fastjson。annotation。JSONField;importlombok。Data;DatapublicclassStudent{privateIntegerid;privateStringname;privateStringaddress;JSONField(namephonenumber)privateStringphoneNumber;}
  在phoneNuber上注解JSONField且name为phonenumber,看测试结果,21:47:48。766〔main〕INFOcom。atssg。test。TestFastJsonstudent序列化为:{address:beijing,id:1,name:tom,phonenumber:0106668899}
  可以看到在序列化的json字符串中出现了phonenumber,说明JSONField起了作用,在序列化的时候指定序列化字段的名称,如果指定了使用指定的(JSONField中name的值),如果不指定使用java类中属性的名字。3、JSONField注解
  在上面,我们看了JSONField的两种用法,还有很多用法,这里不一一列举,看下JSONField这个注解的定义,Sourcecoderecreatedfroma。classfilebyIntelliJIDEA(poweredbyFernFlowerdecompiler)packagecom。alibaba。fastjson。annotation;importcom。alibaba。fastjson。parser。Feature;importcom。alibaba。fastjson。serializer。SerializerFeature;importjava。lang。annotation。ElementType;importjava。lang。annotation。Retention;importjava。lang。annotation。RetentionPolicy;importjava。lang。annotation。Target;Retention(RetentionPolicy。RUNTIME)Target({ElementType。METHOD,ElementType。FIELD,ElementType。PARAMETER})publicinterfaceJSONField{intordinal()default0;Stringname()default;Stringformat()default;booleanserialize()defaulttrue;booleandeserialize()defaulttrue;SerializerFeature〔〕serialzeFeatures()default{};Feature〔〕parseFeatures()default{};Stringlabel()default;booleanjsonDirect()defaultfalse;Classlt;?serializeUsing()defaultVoid。class;Classlt;?deserializeUsing()defaultVoid。class;String〔〕alternateNames()default{};booleanunwrapped()defaultfalse;StringdefaultValue()default;}
  在这个注解上使用了Target注解标注,Target中的值为{ElementType。METHOD,ElementType。FIELD,ElementType。PARAMETER},也就是说JSONField可以标注在方法上、字段、参数上。在上面的例子中,我们把JSONField用在了字段上,下面看使用在方法上的例子,在一个类中有getXXXsetXXX方法,看JSONField用在getXXXsetXXX的用法。packagecom。atssg。test;importcom。alibaba。fastjson。annotation。JSONField;importlombok。Data;DatapublicclassStudent{privateIntegerid;privateStringname;privateStringaddress;privateStringphoneNumber;getXXX方法用在序列化过程中JSONField(serializefalse)publicStringgetPhoneNumber(){returnphoneNumber;}setXXX方法用在反序列化过程中JSONField(deserializefalse)publicvoidsetPhoneNumber(StringphoneNumber){this。phoneNumberphoneNumber;}}
  看测试结果21:59:28。334〔main〕INFOcom。atssg。test。TestFastJsonstudent序列化为:{address:beijing,id:1,name:tom}
  再来看反序列化的测试结果,测试类,packagecom。atssg。test;importcom。alibaba。fastjson。JSON;importlombok。extern。slf4j。Slf4j;Slf4jpublicclassTestFastJson{publicstaticvoidmain(String〔〕args){StudentstudentnewStudent();student。setId(1);student。setName(tom);student。setAddress(beijing);student。setPhoneNumber(0106668899);把对象转化为json串StringjsonStringJSON。toJSONString(student);log。info(student序列化为:{},jsonString);反序列化Stringstr{address:beijing,id:1,name:tom,phoneNumber:0106668899};StudentstuJSON。parseObject(str,Student。class);log。info(反序列化的结果:{},stu);}}
  使用了含有phoneNumber的字符串,看反序列化的结果,22:04:04。746〔main〕INFOcom。atssg。test。TestFastJsonstudent序列化为:{address:beijing,id:1,name:tom}22:04:04。776〔main〕INFOcom。atssg。test。TestFastJson反序列化的结果:Student(id1,nametom,addressbeijing,phoneNumbernull)
  可以看到phoneNumber的值为null,证明该属性未取得反序列化的值,证明了JSONField用在setXXX方法上起到了反序列化的控制作用。三、总结
  本文分享了fastjson中JSONField的用法,主要是在序列化反序列化的过程中,主要体现在以下几个方面,JSONField用在字段上影响序列化反序列化两个过程;JSONField用在setXXX、getXXX方法上,分别影响反序列化、序列化过程;

我喜欢水仙花作文这次的水仙花叶比以前更多了、更茂盛了、更美了。水仙花有一个功能就是可以还净化空气,让同学们呼吸到新鲜的空气;还可以给教室增添美丽;还可以吸收二氧化碳,这样就使教室焕然一新了。这……小学四年级感谢作文500字八篇在日常学习、工作或生活中,大家都写过作文,肯定对各类作文都很熟悉吧,作文是由文字组成,经过人的思想考虑,通过语言组织来表达一个主题意义的文体。你知道作文怎样写才规范吗?下面是小……新学期计划新学期计划在这新学期来临之际,新年的钟声渐渐消逝,我们也从过节的快乐中走出,投入到紧张的学习生活之中,因此制定这个学习计划。首先,应该先纠正自己的学习态度。ldqu……英语周记格式英语周记格式周记的基本格式是写明日期(包括星期,年,月,日,气候),标题,主题内容,末尾写上署名。日期的格式:星期,年,月,日,天气eg:July……热闹区日记今天星期一我们都在想今天是哪一位老师来呢?是凶巴巴的章老师还是和蔼可亲的杨老师呢?真是百思不得其解呀!过了一会儿,我们真是想不出是哪个老师来了。李锦程着急的说:观察兵出动。说着……一加ACE竞速版官宣,天玑8100MAXLCD屏幕,2000一加ACE不够香不要紧,官方还将出一个更香的手机,一加ACE竞速版称将会是2000档最强性能真香机!一加ACE竞速版将会搭载与联发科独家定制的神U天玑8100……有关我的偶像作文400字三篇无论是在学校还是在社会中,大家都不可避免地要接触到作文吧,作文根据写作时限的不同可以分为限时作文和非限时作文。你写作文时总是无从下笔?以下是小编整理的我的偶像作文400字3篇,……老鹰抓小鸡老鹰捉小鸡一天清早,风儿轻轻的吹着,太阳慢慢爬上东山。小草和小花都醒了。小鸟跑出鸟窝在空中自由飞翔。鸡妈妈带着宝贝小鸡出来玩耍、捉虫。小鸡有的伸伸腿,弯弯腰做着体操,有的……投影仪小白入门教程参数怎么看,SoC主芯片对于性能影响大吗?投影仪应该怎么选?说实话,目前市面上的中端投影仪是竞争最激烈的,也是最鱼龙混杂的,产品水平素质参差不齐,对于小白来说确实难选。笔者告诉大家一个直接有效的方法:先看预算,再看意向……有关冬至的作文500字4篇在平时的学习、工作或生活中,大家都写过作文,肯定对各类作文都很熟悉吧,作文是人们把记忆中所存储的有关知识、经验和思想用书面形式表达出来的记叙方式。为了让您在写作文时更加简单方便……关于国际奥林匹克日的英语作文1894年6月23日,国际奥委会在巴黎正式成立,为了纪念这一具有历史意义的经过国际奥林匹克委员会的赞同,把这一日称为ldquo;奥林匹克日rdquo;或运动日。国际奥委会从19……红米note11t千元机的福音红米Note11T系列的性能非常值得期待,目前市场中已经基本确认要搭载天玑8000处理器,相比于此前使用的天玑1100处理器和天玑920处理器,这次的性能得到了大幅度提升……
难忘的厦门之旅作文鼓浪屿最著名的景点就是日光岩,当地有句俗话说:ldquo;不登日光岩,不算到厦门。rdquo;小编收集了难忘的厦门之旅,欢迎阅读,第一篇:难忘的厦门之旅五一节到了,……国旗下讲话实现顺畅交流,构建和谐社会亲爱的同学们:早上好!你们知道这个周是什么日子吗对!这个周是第八届全国推广普通话宣传周,简称推普周。普通话是全国通用的语言。它以北京语音为标准音。以北方话为基础方言,以典……摩擦起电的六年级作文【篇一:摩擦起电】这节作文课,老师神秘地说:今天,我们来做一个小实验。她借了三样东西,分别是尺子、圆珠笔和废纸。同学们一头雾水,到底要做什么实验呢?接着,老师请上了……小学生作文欣赏海宁之旅品学网:海宁是浙江省的一个城市,这里的风景优美,有着很多特色物品,是一个旅游的好地方呢!海宁位于浙江省,那里享誉全世界的就是皮草了,让你一进商场就眼花缭乱。海宁的皮……新学期叙事作文读书之感新学期叙事作文:读书之感我是一个小书迷,就因为我小的时候妈妈经常带我去书店看书,从此我就爱上了看书。看书成了我每天必须做的事情。吃饭、坐车、出门也带着书、甚至连妈妈……二十四节气之惊蛰作文500字惊蛰是二十四节气中的一个节气,描写一下惊蛰节气该怎么描写呢?下面小编整理了二十四节气之惊蛰作文500字,供你参考!描写惊蛰的作文500字范文篇一惊蛰至,雷声起。走进……ipadmini5小屏党的福音2019年3月18日,苹果偷偷的发布了ipadAIR和ipadmini。相对于2015年发布的ipadmini4,那真的是加量不加价。我相信很多人还是小屏党的死忠,我说的……股神巴菲特展示自用手机竟并非iPhone中关村在线消息:3月29日,沃伦巴菲特除了有一个股神的称号,他还有另一个身份,那就是苹果的股东,他旗下的公司曾购买了苹果的股票。那么作为苹果的股东,他使用的手机会是iPhone……伟大的母爱学生作文600字母爱一般泛指妈妈对子女的爱。属于妈妈的或妈妈应有的温柔、热情或慈爱。伟大的母爱学生作文600字,一起来看看。【篇一:伟大的母爱】母爱犹如春天灿烂的阳光,带给我温暖和光明;……iPhoneXI工程设计图曝光后置方形四摄致敬华为?苹果去年发布的三款新iPhone还在市场热销,下一代iPhone的消息却已经满天飞。此前,有消息称iPhoneXI(外媒曝光的型号名,暂时就这么叫吧)将加入方形摄像头模组,并位……来自EMUI9。1的颠覆性创新,让性能更强劲搭载EMUI9。1系统的HUAWEIP30来了,它不但是一款很棒的影像手机,更是一部高颜值很能打的极品。想知道EMUI9。1运行更快的秘密,那就往下看吧!Android性……写摘草莓作文导语:相信大家都吃过草莓吧,那么大家都去摘过草莓吗?下面是小编为大家收集整理的写摘草莓作文,一起来看看吧。【篇一:摘草莓】童年是快乐的,也是美好的。随着时光的流逝,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网