从错误中,我想相信这与您的模式有关
Car,该模式的列
{"color"}取自@JsonPropertyOrderon
Car而不是
"name"值。
您可能想在其中添加
"parts",但是会得到与
"name"该模式无关的相同错误。
在对您的代码进行一些更改之后,我得以序列化和反序列化一个
Car对象。
部分
在这里,经过一些其他更改,它需要一个具有单个String值的构造函数,因此添加
@JsonPropertyOrder({"name"})public static class Part { @JsonProperty("name") private String name; public Part() { this(""); } public Part(String partJSON) { // TODO: Unserialize the parameter... it is a serialized Part string... this.name = partJSON; }汽车
在这里,您将需要实现一种方法,该方法可以将
List<Part>手动转换为CSV可读格式。
这样的方法看起来像这样
@JsonGetter("parts")public String getPartString() { String separator = ";"; StringBuilder sb = new StringBuilder(); Iterator<Part> iter = this.parts.iterator(); while (iter.hasNext()) { Part p = iter.next(); sb.append(p.getName()); if (iter.hasNext()) sb.append(separator); } return sb.toString();}另外,不要忘了将模式固定在类的顶部
@JsonPropertyOrder({"color", "parts"})public static class Car { @JsonProperty("color") private String color; @JsonProperty("parts") private List<Part> parts; public Car() { this.parts = new ArrayList<>(); }连载
您可以更改
serialize方法以将类的类型作为通用类型参数,而不是
Class像这样的显式类型。
public static final synchronized <T> String serialize(final T object, final Boolean withHeaders) throws IOException { CsvMapper csvMapper = new CsvMapper(); CsvSchema csvSchema = csvMapper.schemaFor(object.getClass()); if (withHeaders) { csvSchema = csvSchema.withHeader(); } else { csvSchema = csvSchema.withoutHeader(); } return csvMapper.writer(csvSchema).writevalueAsString(object);}主-作家
现在,如果您序列化
Car,应该会看到
color,partsred,gearbox;door;bumper
主要-读者
然后读取该CSV字符串并遍历
Car.getParts()
Car car = mapper.readerFor(Car.class).with(csvSchema).readValue(csv);for (Part p : car.getParts()) { System.out.println(p.getName());}gearboxdoorbumper


