200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Fastjson首字母大小写问题

Fastjson首字母大小写问题

时间:2022-09-19 02:06:42

相关推荐

Fastjson首字母大小写问题

Fastjson首字母大小写问题

最近由于项目里用到了多个json类库,fastjson,org.json,jackson都有用到,最终把json类库统一成了API最为简单的Fastjson。

Fastjson替换org.json之后导致部分功能不可用,最终确定为fastjson的默认首字母小写机制造成的。

maven依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency>

测试代码

// 省略get set

public class Student {private String ID;private String NAME;private String ADDREDD;}

测试代码

import com.alibaba.fastjson.JSON;public class FastjsonTest {public static void main(String[] args) {Student student = new Student();student.setID("123");student.setNAME("zhangsan");student.setADDREDD("shanghai");String s = JSON.toJSONString(student);System.out.println(s);}}

{"aDDREDD":"shanghai","iD":"123","nAME":"zhangsan"}

解决办法

patibleWithJavaBean设置为true

patibleWithJavaBean = true;

也可以通过设置jvm参数。

2.@JSONField注解

public class Student {@JSONField(name = "ID")private String ID;@JSONField(name="NAMW")private String NAME;@JSONField(name = "ADDRESS")private String ADDREDD;}

{"ADDRESS":"shanghai","ID":"123","NAMW":"zhangsan"}

问题分析

通过查看Fastjson源码可知,Fatjson在序列化对象时,会判断compatibleWithJavaBean,如果为fals则将首字母小写,compatibleWithJavaBean默认值为false.

ublic class TypeUtils {private static final Pattern NUMBER_WITH_TRAILING_ZEROS_PATTERN = pile("\\.0*$");public static boolean compatibleWithJavaBean = false;public static boolean compatibleWithFieldName = false;...}

...if (Character.isUpperCase(c2)) {if (compatibleWithJavaBean) {propertyName = decapitalize(methodName.substring(2));} else {propertyName = Character.toLowerCase(methodName.charAt(2)) + methodName.substring(3);}propertyName = getPropertyNameByCompatibleFieldName(fieldCacheMap, methodName, propertyName, 2);...

参考资料

/alibaba/fastjson/issues/373

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。