2016-06-07 90 views
2

我使用ObjectMapper的writeValueAsString方法將Java bean轉換爲JSON字符串,其中Java bean的大寫變量正在JSON字符串中更改爲小寫字母。 傑克遜2.7.4版本實施。 基地豆樣品 -Jackson -Jans bean to JSON字符串:在JSON中轉換成小寫字母的大寫變量

public class BaseBean { 

private static final long serialVersionUID = 3947489072259877540L; 

private int _iXId; 
private String _sPNR; 
private ArrayList _alMinPriced = new ArrayList<TermBean>(); 

public int getXId() { 
    return _iXId; 
} 

public void setXId(int id) { 
    _iXId = id; 
} 

public String getPNRNumber() { 
    return _sPNR; 
} 

public void setPNRNumber(String _spnr) { 
    _sPNR = _spnr; 
} 

public ArrayList getMinPriced() { 
    return _alMinPriced; 
} 

public void setMinPriced(ArrayList minPriced) { 
    _alMinPriced = minPriced; 
} 

public void setMinPriced(TermBean bnTerm) { 
    _alMinPriced.add(bnTerm); 
} 

}

早些時候,我們使用net.sf.json.JSON & JSONSerializer爲Java bean來JSON的轉換。生成的JSON字符串與我們擁有的Java bean具有相似的命名。由於性能問題,我想改變這個實現Jackson的&。

限制:我們不能更改Java bean的命名約定,因爲這些bean來自較舊的項目,並且沒有更改bean中變量名稱的範圍,甚至無法在每個bean中添加json屬性。

我曾嘗試下面的代碼,但沒有工作

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); 
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE); 

另外,我曾嘗試定製PropertyNamingStrategy但在這個並不清楚。

修改於:下面對上面的bean提到

net.sf.json.JSON生成JSON字符串:

{"XId":11,"PNRNumber":"123456789","minPriced":[{"name":"JSON"},{"name":"simple"}]} 

傑克遜生成JSON字符串低於上述豆所提:

{"xid":11,"pnrnumber":"123456789","minPriced":[{"name":"JSON"},{"name":"Jackson"}]} 

正如您所見,傑克遜將「XId」轉換爲「xid」,將傑克遜轉換爲「pnrnumber」的「PNRNumber」。

Jackson是否有任何配置更改可用於避免此類修改。 或如何處理這種情況。

+1

我不明白你是否試圖從該bean生成JSON - 你試過了嗎?生成的JSON是什麼? - 一般來說,您可以使用com.fasterxml.jackson.annotation.JsonProperty註釋來更改JSON屬性的名稱/使它們不同於Java bean字段。 - 我可能不明白你的問題。 – cslotty

回答

3

繼罐已被用於:

  1. 傑克遜核心-2.7.4.jar
  2. 傑克遜的註解-2.7.4.jar
  3. 傑克遜 - 數據綁定-2.7.4。罐子

第1步:請填寫下面的Mixin如下:

import java.util.ArrayList; 
import com.fasterxml.jackson.annotation.JsonProperty; 

public abstract class MixIn { 
    @JsonProperty("PNRNumber") 
    abstract String getPNRNumber(); 

    @JsonProperty("XId") 
    abstract int getXId(); 

    @JsonProperty("minPriced") 
    abstract ArrayList getMinPriced(); 
} 

第2步:請填寫您的模塊如下: -

import com.fasterxml.jackson.databind.module.SimpleModule; 

public class MyModule extends SimpleModule{ 
    public MyModule() { 
    super("ModuleName"); 
    } 
    @Override 
    public void setupModule(SetupContext context){ 
    context.setMixInAnnotations(BaseBean.class, MixIn.class); 
    } 
} 

第3步:現在,它的時間得到json字符串如下:

TermBean bean1=new TermBean("JSON"); 
TermBean bean2=new TermBean("simple"); 
ArrayList list=new ArrayList(); 
     list.add(bean1); 
     list.add(bean2); 
BaseBean bb=new BaseBean(); 
     bb.setXId(11); 
     bb.setPNRNumber("123456789"); 
     bb.setMinPriced(list); 

ObjectMapper mapper = new ObjectMapper(); 
Module myModule = new MyModule(); 
mapper.registerModule(myModule);   
String jsonInString = mapper.writeValueAsString(bb);  
System.out.printf("JSON: %s", jsonInString); 

輸出:

JSON: { 「XID」:11 「PNRNumber」: 「123456789」, 「minPriced」:[{ 「名稱」: 「JSON」},{ 「名稱」:「簡單「}]}

希望這會有所幫助。

相關問題