Fastjson首字母大小写问题

发布于:2024-07-07 ⋅ 阅读:(128) ⋅ 点赞:(0)

1、问题

使用Fastjson转json之后发现首字母小写。实体类如下:

@Data
public class DataIdentity {
    private String BYDBSM;
    private String SNWRSSJSJ;
    private Integer CJFS = 20;
}

测试代码如下:

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.

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;
...
}
...
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

TypeUtils.compatibleWithJavaBean = true;

也可以通过设置jvm参数。

2.@JSONField注解

@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()方法

String str = JSONUtil.toJsonStr(yytStuCountDto);

4、参考文章

Fastjson首字母大小写问题_fastjson 首字母小写-CSDN博客

https://www.cnblogs.com/haoxianrui/p/12853343.html

fastjson转换json时,碰到的那些首字母大小写转换的坑! - 简书


网站公告

今日签到

点亮在社区的每一天
去签到