关于fastjson的一个坑:输出json时,bean对象属性首字母默认被小写

fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴。  

主要特点:  

  1. 快速FAST: 比其它任何基于Java的解析器和生成器更快,包括jackson 
  2. 强大:支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum
  3. 零依赖:没有依赖其它任何类库除了JDK

强大的fastjson,依然留下了一个坑,先看代码示例:

public class STB {
    
    private java.lang.String STCD;
    
    private java.lang.String STNM;
    
    public java.lang.String getSTCD() {
        return this.STCD;
    }
    public void setSTCD(java.lang.String STCD) {
        this.STCD=STCD;
    }

    public java.lang.String getSTNM() {
        return this.STNM;
    }
    public void setSTNM(java.lang.String STNM) {
        this.STNM=STNM;
    }

}

输出

{"sTCD":"as001","sTNM":"金陵"}

fastjson留下的坑:Bean对象的属性字段首字母默认被转成了小写形式 解决办法有两种。

解决办法一:在Bean实体的get方法上添加注解@JSONField(name = "XXX"),修改STB的代码如下:

public class STB {
    
    private java.lang.String STCD;
    
    private java.lang.String STNM;
    
    @JSONField(name = "STCD")
    public java.lang.String getSTCD() {
        return this.STCD;
    }
    public void setSTCD(java.lang.String STCD) {
        this.STCD=STCD;
    }

    @JSONField(name = "STNM")
    public java.lang.String getSTNM() {
        return this.STNM;
    }
    public void setSTNM(java.lang.String STNM) {
        this.STNM=STNM;
    }

}

输出:

{"STCD":"as001","STNM":"金陵"}

解决办法二:对fastjson进行设置,指定compatibleWithJavaBean为true,修改main方法如下:

    public static void main(String[] args)
    {
        STB stb = new STB();
        stb.setSTCD("as001");
        stb.setSTNM("金陵");
        
        TypeUtils.compatibleWithJavaBean = true;
        String jsonString = JSON.toJSONString(stb); 
        System.out.println(jsonString);
    }

输出:

{"STCD":"as001","STNM":"金陵"}

~

 

posted @ 2017-05-18 17:16  百折不回  阅读(2500)  评论(0编辑  收藏  举报