fastjson序列化(对象转字符串)时字段的⼤⼩写问题与我⾃
⼰的使⽤⽅案
因为现在公司的后台是,⽽他们的命名⽅式并不是Java的JavaBean,。这时如果还是按照以前的⽅式实体的创建使⽤JavaBean的⽅式,在序列化的时候就会出现很多不必要的⿇烦-———当我们需要传递序列化的参数给后台时就会发现变量名⾸字母全部都成了⼩写。
先说⼀说我刚开始的解决⽅式吧,因为我之前就知道使⽤ @JSONField 注解可以改变变量名称,于是我便使⽤这个注解将参数序列化时的名称改为⾸字母⼤写,刚开始参数很少没有感觉,但是随着参数的增加(已经达到⼗⼏个了),我觉得这种⽅式是在太蠢了,实在是⼀个没有意思的体⼒活,于是我查了点资料加上⾃⼰的测试发现:
fastjson在序列化时已经为考虑到了Model的两种创建⽅式:
1.熟悉的JavaBean⽅式-也就是使⽤驼峰法(变量名⾸字母⼩写),同时变量添加Get与与Set⽅法,变量的访问⽅式设置为私有:
这时fastjson在序列化是会根据get⽅法的第三的字符后的字符串来判断变量名称,同时第⼀个参数会设置成⼩写,fastjson中的TypeUtils中的静态变量
compatibleWithJavaBean(当做JavaBean来处理)会设置成True
2.变量的⾸字母是⼤写,不需要Get Set⽅法,使⽤构造⽅法给field赋值,或者使⽤直接赋值的⽅式(使⽤"."来赋值),变量访问⽅式为公有:
这时fastjson在序列化时会根据字段的名称来判断变量的名称(fastjson中称为FieldName).fastjson中的TypeUtils中的静态变量compatibleWithFieldName(根据FieldName来输⼊输出数据)会设置成True
3.如果两个条件同时满⾜的话将会同时使⽤两种⽅式来处理。
fastjson常用方法最后我⾃⼰的使⽤⽅案:
刚开始的时候我很想坚持⾃⼰的习惯⽅式(使⽤JavaBean),但是实在是太⿇烦了——每个字段都需要添加FieldName,实在是太累了,我受不了放弃了,
最后我想了⼀下,为什么我要这么坚持Java的命名⽅式呢?合适的不就是最好的吗?于是我决定也按照后台的命名规则来创建实体类,但是我还是想保留⼀些JavaBean的优点:可以在Set⽅法中做⼀些其他的处理操作,于是当我需要Set⽅法时我保留了字段的反序列化(添加Get Set⽅法),但是我⼜不想在序列化
时存在⾸字母⼩写的字段,于是我便在Get⽅法上添加注解-@JSONField(serialize = false)。
这是我⽬前的解决⽅案,或许在我对fastjson源码更加了解(只看了⼀点点...有个Config类没细看可能能解决我的疑惑, maybe )
或者经验更丰富后我能有更好的解决⽅式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。