使用jquery ajax请求获取了json格式的数据,获取到后一直不能按照想要处理的方式处理,本以为是前端除了问题,调试了之后发现竟然是fastjson在转换中那个属性没有转换。
上个例子看看:
import com.alibaba.fastjson.JSON;
public class JSONTest1 {
private String nM;
private String nnM;
private String GMou;
private String Gao;
public String toJson(){
return JSON.toJSONString(this);
}
public String getnM() {
return nM;
}
public void setnM(String nM) {
this.nM = nM;
}
public String getNnM() {
return nnM;
}
public void setNnM(String nnM) {
this.nnM = nnM;
}
public static void main(String[] args){
JSONTest1 jsonObject=new JSONTest1();
jsonObject.setnM("gao1");
jsonObject.setNnM("gao2");
jsonObject.setGao("gao3");
jsonObject.setGMou("gao4");
System.out.println(jsonObject.toJson());
}
public String getGMou() {
return GMou;
}
public void setGMou(String gMou) {
GMou = gMou;
}
public String getGao() {
return Gao;
}
public void setGao(String gao) {
Gao = gao;
}
}
输出是:
分析下: 为什么nM没有被输出呢?
一个Javabean对象的命名规则及解析:
如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 之后的部分(大小写维持不变)。
如果前两个字母是大写,那么该属性名直接用作 getter/setter 方法中get/set 之后的部分(大小写维持不变)。
如果首字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 之后的部分(大小写维持不变)。
其余情况下,属性名中首字母变为大写用作 getter/setter 方法中 get/set 之后的部分。
这三种情况都解决了,但是明显看到属性名:“GMou”变为了"gMou",“Gao"变为"gao",可见还是java反射的那一套,只是在寻找get、set方法中拿get/set之后是小写字母的属性就没辙了,需要注意下命名。
属性首字母小写第二个字母大写,是会被fastjson给扔掉不管的。