2014-04-21 99 views
2

我想建立谷歌圖表與傑克遜,我可以很容易地創建一個JSON文件的DataTable ..我如何創建一個自定義傑克遜映射器?

我用這個版本傑克遜:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.2.3</version> 
</dependency> 

我有以下的類(本示例創建僅排此刻):

public class DataTable implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @JsonProperty("rows") 
    private List<DataTableRow> dataTableRows; 


    public List<DataTableRow> getDataTableRows() {  
     return dataTableRows;  
    } 

    public void setDataTableRows(List<DataTableRow> dataTableRows) { 
     this.dataTableRows = dataTableRows;  
    } 

} 

然後我有一個DataTableRow類

public class DataTableRow implements Serializable{ 

    private static final long serialVersionUID = 1L;  

    @JsonProperty("c") 
    List<SingleTableCell> singleTableCell; 

    public List<SingleTableCell> getSingleTableCell() {   
     return singleTableCell;  
    } 

    public void setSingleTableCell(List<SingleTableCell> singleTableCell) {   
     this.singleTableCell = singleTableCell;  
    } 

} 

和行有幾個SingleTableCells

public class SingleTableCell implements Serializable{ 

    private static final long serialVersionUID = 1L;  

    @JsonProperty("v") 
    private Value value; 

    @JsonProperty("f") 
    private String formattedValue = null; 


    public Value getValue() {  
     return value; 
    } 


    public void setValue(Value value) {   
     this.value = value;  
    } 


    public String getFormattedValue() {   
     return formattedValue; 
    } 


    public void setFormattedValue(String formattedValue) { 
     this.formattedValue = formattedValue; 
    } 

} 

這會產生我一個JSON字符串是這樣的:

{

"rows": [ 
    { 
     "c": [ 
      { 
       "v": { 
        "value": "Hans" 
       }, 
       "f": null 
      }, 
      { 
       "v": { 
        "value": 3.4 
       }, 
       "f": null 
      } 
     ] 
    } 
] 

}

問題是我的價值目標,這是一個抽象類我不希望這個類呈現爲一個JSON對象,我只想要一個鍵值對!因此它不應該渲染到這一點:

「V」:{ 「值」: 「漢斯」 }

我想只有這個: 「V」: 「漢斯」

,我想我可以定義值對象是如何rendert值對象卡恩是例如字符串,雙人或Date對象......如果是日期應該轉換爲這樣的字符串Date對象:「v」:日期(2010年,10,01)

,如果它像一個字符串或雙人牀我想決定JSON字符串怎麼看起來像其他物體..

我的抽象類是這樣的:

public abstract class Value { 

} 

public class StringValue extends Value{ 

    String Value; 
} 



public class DoubleValue extends Value{ 

    Double Value; 
} 


public class DateValue extends Value{ 

    Date Value; 
} 

回答

1

我會做如下修改代碼,以達到你想要什麼:

public abstract class Value { 

} 

public class StringValue extends Value{ 

    @JsonValue 
    //do whatever else you need although I can't really see what that would be 
    String Value; 
} 



public class DoubleValue extends Value{ 

    @JsonValue 
    //do whatever else you need although I can't really see what that would be 
    Double Value; 
} 


public class DateValue extends Value{ 

    @JsonValue 
    @DateFormat() //insert the relevant date code here 
    Date Value; 

} 

從您發佈我不能代碼真正看到什麼Value類的目的是,但我跑了這裏,因爲我猜你用它做更多的比你已經張貼