使用Jackson CsvMapper序列化POJO时省略字段

时间:2013-10-17 13:36:37

标签: java serialization csv jackson

我正在使用jackson将POJO序列化为CSV。我的问题是,在序列化时我无法弄清楚如何省略某些字段。我不想要注释POJO,因为它会影响需要这些字段的JSON和XML序列化。例如

public class POJO {
  public string field1; //required by JSON and CSV
  public string field2; //only required by JSON
}

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

对我有用的是将CsvMapper设置com.fasterxml.jackson.core.JsonGenerator.Feature设置为true

CsvMapper mapper = new CsvMapper(); //com.fasterxml.jackson.dataformat.csv.CsvMapper
MAPPER.configure(Feature.IGNORE_UNKNOWN, true);

将所需的列添加到架构中。

CsvSchema schema = CsvSchema.builder();
    .addColumn("A")
    .addColumn("C")
    .build();

我的POJO

public class MyClass{

    @JsonProperty("A")
    private string a;

    @JsonProperty("B")
    private string b;

    @JsonProperty("C")
    private string c;

    //getters setters

}

要获取CSV字符串,我执行了此操作:

List<MyClass> list = new MyClass();
MyClass row = new MyClass();

row.setA("Value A");
row.setB("Value B");
row.setC("Value C");

list.add(row);

ObjectWriter ow = mapper.writer(schema);
String csv = ow.writeValueAsString(list);

输出(withHeaders):

A,C
"Value A","Value C"