1. 程式人生 > >jackson解析json字串,首字母大寫會自動轉為小寫

jackson解析json字串,首字母大寫會自動轉為小寫

問題

樓主碰到的問題是,在實體類和表中定義的某個欄位為RMBPrice,首字母大寫,sql查詢出來的列名也是大寫的RMBPrice,但是使用jquery的datatables初始化列時,卻出錯。那一行的程式碼如下:

{"name": "RMBPrice", "data": "RMBPrice", "className": "text-center", "render": formatRMBPrice},

報錯圖片
開啟頁面卻會顯示這個。檢視瀏覽器呼叫介面返回的值:
介面值

是小寫的rmbprice

分析

介面返回的是一個@ResponseBody物件,在程式碼中打斷點,一直到介面的返回值都是大寫的,所以只可能是轉換到json的時候出了問題。
百度 json 首字母大寫,就出現了自動轉換為小寫的文章。
經過測試確實是,當前幾個都是大寫的字母,都會轉換成小寫,直到不是大寫為止,若小寫後面還有大寫,則保持大寫。如:RRRddRRR會變成rrrddRRR.

解決辦法

我直接修改js裡面那行程式碼,改為:

{"name": "rmbprice", "data": "rmbprice", "className": "text-center", "render": formatRMBPrice},

經過查詢,如果要保留大寫需要加上註解。
比如jackson使用:
在實體類定義欄位時:

 @JsonProperty("ActionCode")  
 private String ActionCode = ""; 

fastjson使用:
@JSONField(name = “Name”) 而且該標記應該標記在get方法前:

public class User {  
    private String name;  
    private int age;  

    @JSONField(name = "Name") 
    public String getName(){
       return name;
    }  

    public void setName(String name){
       this.name = name;
    }

    @JSONField(name = "Age") 
    public int getAge(){
       return
age; } public void setAge(int age){ this.age= age; } }

也有說:
強制轉換,用com.alibaba.fastjson.serializer.PascalNameFilter,直接把首字母轉成大寫。如:JSON.toJSONString(bean,new PascalNameFilter());

不過上面那些我都沒有試過,因為我採用了自動轉換為小寫之後的name。想要保留大寫還需要你們自己去多找找看喔~~☺☺