fastjson2
fastjson2 copied to clipboard
[BUG]CamelCase has some problems
问题描述
简要描述您碰到的问题。
环境信息
请填写以下信息:
- OS信息: Mac M1
- JDK信息: zulu8
- 版本信息:[e.g.:Fastjson2 2.x.x]
重现步骤
如何操作可以重现该问题:
- 使用
BeanUtils.getterName
方法 - 输入
UId
数据 - 出现
UId
错误
public static void main(String[] args) {
A vo = new A();
vo.setCId("2");
System.out.println(JSON.toJSONString(vo));
//{"CId":"2"}
}
@Data
static public class A {
private String uId;
private String cId;
}
期待的正确结果
对您期望发生的结果进行清晰简洁的描述。 //{"cId":"2"}
相关日志输出
请复制并粘贴任何相关的日志输出。
{"CId":"2"}
附加信息
如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。
and than i found the error code that is here
![image](https://user-images.githubusercontent.com/84554944/178403558-0d743c39-b8c4-4bdb-869b-e56d36153a98.png)
CamelCase's definition is the first word is lowercase. but here why do you add char[1] && chars[1] <= 'Z' judge
my mr https://github.com/alibaba/fastjson2/pull/547
fastjson v1 is use reflect to solve fields name, but fastjson2 is use gettername to solve fields name. so i think need to use CamelCase definition to make obvious distinction.
@Test
public void test1() {
B vo = new B();
vo.cId = "2";
assertEquals("{\"cId\":\"2\"}", JSON.toJSONString(vo));
}
public static class B {
public String uId;
public String cId;
}
你可以通过把field声明为public就可以解决这个问题
public static void main(String[] args) {
A a = new A();
a.setUId("a");
System.out.println(JSON.toJSONString(a));
// SpringApplication.run(DemoApplication.class, args);
}
@Data
static public class A {
// @JSONField(name = "uid")
public String uId;
}
如果加上get set方法 {"UId":"a","uId":"a"} 如果加上@JSONField(name = "uid") {"UId":"a","uid":"a"} 我一直没搞懂到底是以什么标准去序列号=。=感觉越来越复杂了。之前说的按javabean去定义序列化的key,那还能理解,那现在如果属性变成public那就又变味了
@Test
public void test2() {
assertEquals("abc", JSON.parseObject("{\"uId\":\"abc\"}", C.class).uId);
assertEquals("abc", JSON.parseObject("{\"UId\":\"abc\"}", C.class).uId);
}
public static class C {
private String uId;
public String getUId() {
return uId;
}
public void setUId(String uId) {
this.uId = uId;
}
}
最新快照版本反序列化已经能支持自动识别多种输入
https://github.com/alibaba/fastjson2/releases/tag/2.0.13 2.0.13版本已经发布,请用帮忙用新版本验证