我想用杰克逊为谷歌图表构建一个DataTable,我可以轻松创建一个json文件..
我使用这个杰克逊版本:
<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
}
]
}
]
}
问题是我的Value对象这是一个抽象类我不希望这个类呈现为json对象我只想要一个键值对!所以它不应该渲染到这个:
“v”:{ “价值”:“汉斯” }
我只想要这个:“v”:“汉斯”
我希望我可以定义Value对象如何呈现值对象,例如String,Double或Date Object ...如果它是Date对象,则Date应该转换为String,如下所示: v“:日期(2010,10,01)
如果它是像String或Double这样的其他对象,我想决定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;
}
答案 0 :(得分: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
的目的是什么,但我在这里跑了,因为我猜你用它做的比你发布的更多