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"}
解决办法
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首字母大小写问题相关推荐
- 使用fastJson把对象转字符串首字母大小写问题的解决
使用fastJson把对象转字符串首字母大小写问题的解决 参考文章: (1)使用fastJson把对象转字符串首字母大小写问题的解决 (2)https://www.cnblogs.com/zeropc ...
- java高效字符串首字母大小写转换
通过找到一个移动ASCII的方式来处理字符串首字母大小写的问题 我们都知道在ascii 码表中 a的ASCIII码值是65而A的ASCII码值是 97 两个之间的差值是 32,所以,如果我们需要把一个 ...
- [Go语言]从Docker源码学习Go——init()方法和identifier首字母大小写区分
init()方法 如果想在一个go文件里,进行一些初始化的工作,可以把代码放到init()方法中. init()方法先被执行. func init() { // initialization of p ...
- 首字母大写转换 java,Java InitialsTransformation(字符串首字母大小写转换)
版权声明:本文为原创博文,最终解释权归一个集 帅气 与 智慧 和 手速 于一身的男人-灭世奶神-所有!- - - - - - - - - - - - -转载:请附上--源作者 / 源博文--相关链接信 ...
- 仓库出现了两个除了首字母大小写不一样的相同文件
之前因为文件名大小写的问题,造成了远程仓库出现了两个除了首字母大小写不一样的相同文件,但是,pull一下,本地也正常展示,没有出现两个文件(只有那个大驼峰的,最新修改后提交的). 想着解决一下,删掉远 ...
- Java-字符串首字母大小写转换(JavaInitialsTransformation)
//package Main;/**** @Explain(说明):字符串首字母大小写转换工具类* @time(时间):2019/04/17* @role(谁):杨木发* @modify(修改)* @ ...
- 实现下拉框的汉字、拼音、首字母大小写,全拼检索选项
调用这个工具类,可以实现下拉框的汉字.拼音.首字母大小写,全拼检索选项 import java.util.Arrays;import net.sourceforge.pinyin4j.PinyinHe ...
- Python 技巧篇 - 英文单词首字母大小写转换功能实例演示,字符串切片实现
首先来介绍下字符串切片 'hello'[1:3] 代表第 1,第 2 这 2 个位置,即 'el',它是大于等于冒号前的,小于冒号后的,如果冒号前是空,代表从头开始,冒号后为空的话,代表结尾,它是第一 ...
- python面试题(4)--- 字符串首字母大小写 和 反转字符串 问题
1.修改字符串首字母的大小写 代码演示: s1 = 'hello' print(s1) print(s1.capitalize())#s1[0] = 'H' 只读的,会抛出异常s1 = s1[0:1] ...
最新文章
- android44投屏开发,ARDC(B1425)android投屏利器,开发好帮手.zip
- 微软发布Azure SignalR Service的预览版本
- Java 循环控制语句break/return/continue的使用
- registerModulePath
- 关于博客园内嵌入bilibili视频
- 华为智慧屏鸿蒙系统怎么样,鸿蒙系统初体验,华为智慧屏V65到底值不值得入手?...
- python21天打卡Day10-string和bytes互转
- 运算优先级、类型转换
- 重写系统黑色的TabBar
- 浪潮信息能制造超级计算机吗,浪潮信息为中国航天探索事业出力 高性能计算技术领衔...
- C#与PLC通信开发之松下FP系列PLC
- 思科交换机配置【串口初始配置】
- 根据UA获取用户访问操作系统、浏览器名
- 【博客344】简述微服务新利剑:Istio
- 基于Python的人脸人眼图像识别处理系统
- DAC中经常遇到的一些术语及含义
- 【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
- matlab仿真报告,电路Matlab仿真实验精选报告.docx
- 王强:销售必须具备九大素质(转)
- 一文读懂云函数 SCF 如何进行依赖安装?