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

标签 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
}

有办法实现吗?

最佳答案

对我有用的是将 CsvMapper 设置 com.fasterxml.jackson.core.JsonGenerator.Feature.IGNORE_UNKNOWN 设置为 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);

输出(带标题):

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

关于java - 使用 Jackson CsvMapper 序列化 POJO 时省略字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19428279/

相关文章:

java - 为什么在 REST API 中为应用程序(android 端)使用身份验证 token 而不是 session_id

java - 多对多关系中的模型结构

java - 无法使用 Jackson XmlMapper 反序列化包装列表

c# - Protobuf-net:如何序列化复杂的集合?

java - 如何用前导零写入 csv?

node.js - 使用 websockets 读取 CSV 文件并定期发送数据(Node、Socket.io)

java - 泛型和 java.beans.Introspector

Java 语法- |= 是什么意思

javascript:如何在没有jquery或其他库的情况下将表单数据序列化为字符串

r - 如何通过 Shiny 的应用程序将更新的表格或数据框保存在现有的 csv 文件中?