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"}

解决办法

1.compatibleWithJavaBean设置为true

TypeUtils.compatibleWithJavaBean = 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 = Pattern.compile("\\.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);
...

参考资料

https://github.com/alibaba/fastjson/issues/373

Fastjson首字母大小写问题相关推荐

  1. 使用fastJson把对象转字符串首字母大小写问题的解决

    使用fastJson把对象转字符串首字母大小写问题的解决 参考文章: (1)使用fastJson把对象转字符串首字母大小写问题的解决 (2)https://www.cnblogs.com/zeropc ...

  2. java高效字符串首字母大小写转换

    通过找到一个移动ASCII的方式来处理字符串首字母大小写的问题 我们都知道在ascii 码表中 a的ASCIII码值是65而A的ASCII码值是 97 两个之间的差值是 32,所以,如果我们需要把一个 ...

  3. [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分

    init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of p ...

  4. 首字母大写转换 java,Java InitialsTransformation(字符串首字母大小写转换)

    版权声明:本文为原创博文,最终解释权归一个集 帅气 与 智慧 和 手速 于一身的男人-灭世奶神-所有!- - - - - - - - - - - - -转载:请附上--源作者 / 源博文--相关链接信 ...

  5. 仓库出现了两个除了首字母大小写不一样的相同文件

    之前因为文件名大小写的问题,造成了远程仓库出现了两个除了首字母大小写不一样的相同文件,但是,pull一下,本地也正常展示,没有出现两个文件(只有那个大驼峰的,最新修改后提交的). 想着解决一下,删掉远 ...

  6. Java-字符串首字母大小写转换(JavaInitialsTransformation)

    //package Main;/**** @Explain(说明):字符串首字母大小写转换工具类* @time(时间):2019/04/17* @role(谁):杨木发* @modify(修改)* @ ...

  7. 实现下拉框的汉字、拼音、首字母大小写,全拼检索选项

    调用这个工具类,可以实现下拉框的汉字.拼音.首字母大小写,全拼检索选项 import java.util.Arrays;import net.sourceforge.pinyin4j.PinyinHe ...

  8. Python 技巧篇 - 英文单词首字母大小写转换功能实例演示,字符串切片实现

    首先来介绍下字符串切片 'hello'[1:3] 代表第 1,第 2 这 2 个位置,即 'el',它是大于等于冒号前的,小于冒号后的,如果冒号前是空,代表从头开始,冒号后为空的话,代表结尾,它是第一 ...

  9. python面试题(4)--- 字符串首字母大小写 和 反转字符串 问题

    1.修改字符串首字母的大小写 代码演示: s1 = 'hello' print(s1) print(s1.capitalize())#s1[0] = 'H' 只读的,会抛出异常s1 = s1[0:1] ...

最新文章

  1. android44投屏开发,ARDC(B1425)android投屏利器,开发好帮手.zip
  2. 微软发布Azure SignalR Service的预览版本
  3. Java 循环控制语句break/return/continue的使用
  4. registerModulePath
  5. 关于博客园内嵌入bilibili视频
  6. 华为智慧屏鸿蒙系统怎么样,鸿蒙系统初体验,华为智慧屏V65到底值不值得入手?...
  7. python21天打卡Day10-string和bytes互转
  8. 运算优先级、类型转换
  9. 重写系统黑色的TabBar
  10. 浪潮信息能制造超级计算机吗,浪潮信息为中国航天探索事业出力 高性能计算技术领衔...
  11. C#与PLC通信开发之松下FP系列PLC
  12. 思科交换机配置【串口初始配置】
  13. 根据UA获取用户访问操作系统、浏览器名
  14. 【博客344】简述微服务新利剑:Istio
  15. 基于Python的人脸人眼图像识别处理系统
  16. DAC中经常遇到的一些术语及含义
  17. 【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
  18. matlab仿真报告,电路Matlab仿真实验精选报告.docx
  19. 王强:销售必须具备九大素质(转)
  20. 一文读懂云函数 SCF 如何进行依赖安装?

热门文章

  1. 填坑之动态代理生成的代理类文件在哪?
  2. validate中remote返回函数中+号导致submitHandler无法执行
  3. 0.96寸oled显示动画软件和步骤
  4. java爬取百度贴吧所有用户头像
  5. h5学习笔记:小程序内置扫码获取普通二维码链接参数
  6. c语言 孪生素数
  7. iOS 盲人模式开发
  8. iPhone与iPad开发实战——iOS 经典应用剖析视频--观看地址
  9. 关于DNS负载均衡技术
  10. 来客推教你可以采取什么方式来布局元宇宙