【问题标题】:How can i create a custom Jackson Mapper?如何创建自定义 Jackson Mapper?
【发布时间】:2014-04-21 20:00:59
【问题描述】:

我想用杰克逊为谷歌图表构建一个数据表,我可以轻松地创建一个 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
            }
        ]
    }
]

}

问题是我的值对象这是一个抽象类我不希望这个类呈现为一个 json 对象我只想要一个键值对!所以它不应该渲染到这个:

“v”:{ “价值”:“汉斯” }

我只想要这个:“v”:“Hans”

并且我希望我可以定义值对象的渲染方式,值对象可以是例如字符串、双精度对象或日期对象...如果它是日期对象,则日期应该像这样转换为字符串:“ 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;
}

【问题讨论】:

    标签: java json spring serialization jackson


    【解决方案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 类的目的是什么,但我在这里运行,因为我猜您使用它做的比您发布的更多

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-23
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2021-04-16
      • 2014-08-05
      相关资源
      最近更新 更多