I try to serialize object containing java.time.LocalDate
in two ways but both failed.
- Annotation with
@JsonUnwrapped
and@JsonFormat(shape=JsonFormat.Shape.STRING)
get error:Exception in thread "main" com.fasterxml.jackson.dataformat.csv.CsvMappingException: CSV generator does not support Object values for properties (nested Objects) (through reference chain: java.util.ArrayList[0]->models.DateRange["finish"]->java.time.LocalDate["chronology"])
@Data
@AllArgsConstructor
@NoArgsConstructor
//@JsonFormat(shape=JsonFormat.Shape.STRING)
public class DateRange {
@JsonUnwrapped
@JsonFormat(shape=JsonFormat.Shape.STRING)
private LocalDate start;
@JsonUnwrapped
@JsonFormat(shape=JsonFormat.Shape.STRING)
private LocalDate finish;
}
--------
public class CsvPractice {
public static void main(String[] args) throws JsonProcessingException {
ArrayList<DateRange> csv = Lists.newArrayList();
for (int i = 1; i < 6; i++) {
csv.add(new DateRange(LocalDate.now().plusDays(i), LocalDate.now().plusDays(i + 1)));
}
CsvMapper mapper = new CsvMapper();
// mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
CsvSchema schema = mapper.schemaFor(DateRange.class).withHeader();
System.out.println(mapper.writer(schema).writeValueAsString(csv));
}
}
- Config mapper
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
without annotation on objects but get:Exception in thread "main" com.fasterxml.jackson.dataformat.csv.CsvMappingException: CSV generator does not support Object values for properties (nested Objects) (through reference chain: java.util.ArrayList[0]->models.DateRange["finish"])
@Data
@AllArgsConstructor
@NoArgsConstructor
//@JsonFormat(shape=JsonFormat.Shape.STRING)
public class DateRange {
// @JsonUnwrapped
// @JsonFormat(shape=JsonFormat.Shape.STRING)
private LocalDate start;
// @JsonUnwrapped
// @JsonFormat(shape=JsonFormat.Shape.STRING)
private LocalDate finish;
}
---------
public class CsvPractice {
public static void main(String[] args) throws JsonProcessingException {
ArrayList<DateRange> csv = Lists.newArrayList();
for (int i = 1; i < 6; i++) {
csv.add(new DateRange(LocalDate.now().plusDays(i), LocalDate.now().plusDays(i + 1)));
}
CsvMapper mapper = new CsvMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
CsvSchema schema = mapper.schemaFor(DateRange.class).withHeader();
System.out.println(mapper.writer(schema).writeValueAsString(csv));
}
}
My jackson version is:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.9.8</version>
</dependency>
Anything I missed?
Refer