1、问题
使用Fastjson转json之后发现首字母小写。实体类如下:
java">@Data
public class DataIdentity {private String BYDBSM;private String SNWRSSJSJ;private Integer CJFS = 20;
}
测试代码如下:
java">public static void main(String[] args) {DataIdentity dataIdentity = new DataIdentity();dataIdentity.setBYDBSM("xxx");dataIdentity.setSNWRSSJSJ(DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd HH:mm:ss"));String str = JSON.toJSONString(dataIdentity);System.out.println(str);
}
测试结果如下:
2、分析
通过查看Fastjson源码可知,Fatjson在序列化对象时,会判断compatibleWithJavaBean,如果为false则将首字母小写,compatibleWithJavaBean默认值为false.
java">public class TypeUtils {private static final Pattern NUMBER_WITH_TRAILING_ZEROS_PATTERN = Pattern.compile("\\.0*$");public static boolean compatibleWithJavaBean = false;public static boolean compatibleWithFieldName = false;
...
}
java">...
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);
...
3、解决方案
1.compatibleWithJavaBean设置为true
java">TypeUtils.compatibleWithJavaBean = true;
也可以通过设置jvm参数。
2.@JSONField注解
java">@Data
public class DataIdentity {@JSONField(name = "BYDBSM")private String BYDBSM;@JSONField(name = "SNWRSSJSJ")private String SNWRSSJSJ;@JSONField(name = "CJFS")private Integer CJFS = 20;}
3、使用hutool的JSONUtil.toJsonStr()方法
java">String str = JSONUtil.toJsonStr(yytStuCountDto);
4、参考文章
Fastjson首字母大小写问题_fastjson 首字母小写-CSDN博客
https://www.cnblogs.com/haoxianrui/p/12853343.html
fastjson转换json时,碰到的那些首字母大小写转换的坑! - 简书