Jackson Json(springboot 默认使用)
在 SpringBoot 中默认使用的 Jackson Json 工具将对象序列化时,会在字段前两个字母全是大写的情况下,将前三个字母全转为小写(无论第三个字母是否大写都会)
可以改使用 Gson、fastJson 等工具序列化,将避免这个问题;
联想到可能的原因 Java Bean 中对字段的隐含的操作
- 因为 java bean 有专门的处理类,所以 bean 不只是规范。对于 bean,java 自身有一套处理类。其他框架大多也是使用 java 的处理类来使用 java bean;
- bean 内的属性全都是通过 get/set 方法来操作的;
- 其中 Introspector 类可以使用,getBeanInfo() 来获取 bean 信息,我们可以直接在 jdk8 中找到 java.beans.Introspector 类 decapitalize 方法(284行),这里可以看到,在读取 bean 信息时,会将前两个字母大写的,原样返回;
- 所以 bean 里面的字段要么前两个字母要么全小写,要么全大写。
- aB 返回:aB;(getAB)
- AB 返回:aB;(getAB)
- Ab 返回:ab;(getAb)
- ab 返回:ab;(getAb)
- 当然,可以不遵守规范,定义为(getaB)来进行区分,这就是另一会事了。
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);
}