fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

[BUG]为什么fastjson2序列化时个别字段首字母变成了大写,但是fastjson却是正常的

Open Siiruo-Wong opened this issue 1 year ago • 5 comments

问题描述

为什么fastjson2序列化时个别字段首字母变成了大写,但是fastjson却是正常的?具体: Bean Field c2c2c4e0-e72a-462d-8d71-2df387124582 Serialize Result c100cb37-d291-4849-8ed0-34211e0c0a85

环境信息

  • OS信息: [e.g.:Mac]
  • JDK信息: [e.g.:Openjdk 1.8.0_341]
  • 版本信息:[e.g.:Fastjson2 2.0.20]

重现步骤

始终重现,JSON.toJSONString(bean)

期待的正确结果

期待应该严格按照bean field序列化

相关日志输出

附加信息

Siiruo-Wong avatar Jul 23 '24 08:07 Siiruo-Wong

同样遇到跟你一样的bug,正准备提的,看到你提了就算了,暂时的修复方法就是添加JSONField来处理

Ive4 avatar Jul 24 '24 03:07 Ive4

fastjson2缺省的PropertyNamingStrategy是和java.beans.Introspector#decapitalize方法行为是一样的,如果你要修改为fastjson1的缺省方式,可以这样做:

JSONFactory.getDefaultObjectWriterProvider().setNamingStrategy(PropertyNamingStrategy.CamelCase1x)

wenshao avatar Aug 10 '24 13:08 wenshao

+1

asd123wto avatar Aug 13 '24 05:08 asd123wto

image

java的 Introspector.decapitalize("sCode") 输出的是小写 不会转成大写

win32fk avatar Aug 20 '24 03:08 win32fk

java的 Introspector.decapitalize("sCode") 输出的是小写 不会转成大写

@win32fk 那是因为你的字段名是 "sCode",但是方法名是"getSCode()"。

Java 规范是根据 getter 方法名来解析属性名称的,而不是字段名称 !

去掉 "get" 前缀,Introspector.decapitalize("SCode") 得到的结果就是首字母大写的。

BTW:现在的 Java开发人员 都不需要学习 Java Bean 规范了么 ?

CodePlayer avatar Sep 20 '24 03:09 CodePlayer