java - JsonGenerationException : CSV generator does not support Object values for properties

标签 java csv serialization jackson jackson-modules

我正在尝试将 Foo 序列化为 String。这似乎是一项非常简单的任务,但由于某些原因 DateTime 似乎无法完成。

测试.java

import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.joda.time.DateTime;

public class Test {

    public static void main(String args[]) {
        try {
            List<Foo> foos = new ArrayList<>();
            Foo foo = new Foo();
            foo.setID(1);
            foo.setCURRENT(new DateTime(new Timestamp(System.currentTimeMillis())));
            foos.add(foo);
            String content = serialize(foos, Foo.class, Boolean.TRUE);
            System.out.println(content);
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static final synchronized String serialize(final Object object, final Class type, final Boolean withHeaders) throws IOException {
        CsvMapper csvMapper = new CsvMapper();
        CsvSchema csvSchema;
        if (withHeaders) {
            csvSchema = csvMapper.schemaFor(type).withHeader();
        } else {
            csvSchema = csvMapper.schemaFor(type).withoutHeader();
        }
        return csvMapper.writer(csvSchema).writeValueAsString(object);
    }

}

Foo.java

import org.joda.time.DateTime;

public class Foo {

    private Integer ID;
    private DateTime CURRENT;

    public Foo() {
    }

    public Integer getID() {
        return ID;
    }

    public void setID(Integer ID) {
        this.ID = ID;
    }

    public DateTime getCURRENT() {
        return CURRENT;
    }

    public void setCURRENT(DateTime CURRENT) {
        this.CURRENT = CURRENT;
    }

}

我已经尝试在我的 Foo 对象中使用 @JsonGetter@JsonSetter 但它并没有真正产生任何影响。

是什么导致了这个错误?

最佳答案

您是否包含 Joda DateTime 的数据类型模块?您需要的是 jackson-datatype-joda,来自 https://github.com/FasterXML/jackson-datatype-joda .如果不是,那就可以解释这个问题,因为值将被视为常规 POJO,而 CSV 不适用于没有某种映射到点分符号的嵌套数据。

关于java - JsonGenerationException : CSV generator does not support Object values for properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37551711/

相关文章:

java - 为什么我的日期无法解析

带有 ActionListeners 的 Java 作用域

c# - 我如何判断一个类是否可以序列化?

java - 是否可以使用单斜杠将字符串序列化为 json?

java - PrintWriter 抛出 FileNotFoundException

javascript - 合并 D3 中具有共同值的对象

parsing - 使用 shell 脚本解析 csv 行中的名称值对

JSON 到 CSV 架构

c# - 子属性中的 DataContract 父引用 - 如何避免无限序列化循环

java - 使用树莓派从 PN532 得到奇怪的答案