FasterXML / FasterXML/jackson-dataformats-text
CSV generator does not support Object values for properties (nested Objects)
- Ngôn ngữ chính
- Java
- Star
- 455
- Fork
- 164
- Merge trung bình
- 6 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 2
Mô tả
I have written a short test class to identify a problem I am encountering when attempting to convert a POJO to a JSON String.
NOTE that in my Java code I tried to configure the `CsvMapper` v2.18.3 to ignore certain types of problems but the `Exception` is still thrown.
Dependency:
```
com.fasterxml.jackson.dataformat
jackson-dataformat-csv
2.18.3
```
The Java code is:
```
package ca.cdr.admin.web.controller;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvParser;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
public class JacksonCsvSerializationTest {
@JsonIgnoreProperties(ignoreUnknown=true)
private static class Name {
private String firstName;
private String lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@JsonProperty("name")
public String getName() {
return this.firstName + " " + this.lastName;
}
}
@JsonIgnoreProperties(ignoreUnknown=true)
private static class Person {
@JsonProperty("id")
private int id = 1;
@JsonProperty("names")
private Collection names = new HashSet();
public Person(Name name) {
this.names.add(name);
}
}
public static void main(String args[]) throws IOException {
Name name = new Name("first", "last");
Person person = new Person(name);
CsvSchema.Builder csvBuilder = new CsvSchema.Builder();
CsvMapper csvMapper = (CsvMapper) new CsvMapper()
.configure(CsvParser.Feature.FAIL_ON_MISSING_COLUMNS, false)
.configure(CsvParser.Feature.FAIL_ON_MISSING_HEADER_COLUMNS, false)
.configure(JsonParser.Feature.IGNORE_UNDEFINED, true)
.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
csvBuilder.addColumn(new CsvSchema.Column(1, "id"));
csvBuilder.addColumn(new CsvSchema.Column(2, "names"));
CsvSchema csvSchema = csvBuilder.build().withStrictHeaders(false);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
csvMapper.writer(csvSchema).writeValue(baos, person);
System.out.println("-->" + baos.toString() + "<--");
}
}
```
The ERROR I get is:
```
Exception in thread "main" com.fasterxml.jackson.dataformat.csv.CsvWriteException: CSV generator does not support Object values for properties (nested Objects) (through reference chain: ca.cdr.admin.web.controller.JacksonCsvSerializationTest$Person["names"]->java.util.HashSet[0])
at com.fasterxml.jackson.dataformat.csv.CsvWriteException.from(CsvWriteException.java:25)
at com.fasterxml.jackson.dataformat.csv.CsvGenerator._reportMappingError(CsvGenerator.java:1108)
at com.fasterxml.jackson.dataformat.csv.CsvGenerator.writeStartObject(CsvGenerator.java:648)
at com.fasterxml.jackson.core.base.GeneratorBase.writeStartObject(GeneratorBase.java:328)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:179)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1574)
at com.fasterxml.jackson.databind.ObjectWriter._writeValueAndClose(ObjectWriter.java:1275)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1098)
at ca.cdr.admin.web.controller.JacksonCsvSerializationTest.main(JacksonCsvSerializationTest.java:62)
```
Any assistance would be appreciated!
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Đánh giá
Issue này chưa được đánh giá.