开发者社区 问答 正文

fastjson 2 首字母为单个字母的驼峰转换问题

class TestVo(){

//JSON.toJSONString()会转换为PName private String pName; //JSON.toJSONString()转化正常 private String proName;

}

public void testJSONToString(){ TestVo testVo = new TestVo(); testVo.setPName("test"); testVo.setProName("test1"); System.out.println(JSON.toJSONString(vo)); //期望输出: {"pName":"test", "proName":"test1"} //实际输出: {"PName":"test", "proName":"test1"} }

问题补充:

使用lomok时,set方法为setPName(), 转换异常 正常生成的set方法为setpName(),能够正常转换 使用兼容版本的JSON.toJSONString(),两种方式都能正常转换

提问35.png

提问36.png

原提问者GitHub用户gsmoking

展开
收起
飘飘斯嘉丽 2023-04-21 11:22:35 190 发布于北京 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 现在的实现是参考java.beans.Introspector#decapitalize方法:

    package java.beans;

    public class Introspector { public static String decapitalize(String name) { if (name == null || name.length() == 0) { return name; } if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) && Character.isUpperCase(name.charAt(0))){ return name; } char chars[] = name.toCharArray(); chars[0] = Character.toLowerCase(chars[0]); return new String(chars); }

    }

    fastjson 1.x的实现,一直有人反馈说不对,希望和java.beans.Introspector#decapitalize方法一致,为了保证兼容一直没改。现在是2.0就改了。

    下面分别是fastjson2、jackson、fastjson1、gson的结果,各不相同,如下:

    // fastjson2 {"PName":"test"}

    // jackson {"pname":"test"}

    // fastjson1 & gson {"pName":"test"}

    你可以通过配置JSONField输出你要的,或者你用最新版本的2.0.13-SNAPSHOT版本,然后把field声明为public,比如:

    @Data public class Bean1 { public String pName; }

    原回答者GitHub用户wenshao

    2023-04-21 14:19:26 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等