- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试以两种方式序列化包含 java.time.LocalDate
的对象,但都失败了。
@JsonUnwrapped
和 @JsonFormat(shape=JsonFormat.Shape.STRING)
进行注释会出现错误:
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));
}
}
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
没有对象上的注释,但得到:
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));
}
}
我的 jackson 版本是:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.9.8</version>
</dependency>
我错过了什么吗?
引用
最佳答案
您的代码即将完成。您的问题是您的映射器未正确序列化 LocalDate
。
要启用 Jackson 对 Java 8 日期和时间类型的序列化,您需要包含以下模块:
https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.10.1
完成此操作后,您需要修改代码以注册 Jackson 的 JSR-310 模块,然后指示它禁用 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
。
因此,基于上述内容,包含该模块,然后只需进行以下代码更改:
CsvMapper mapper = new CsvMapper();
mapper.findAndRegisterModules();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
完成后,您的预期结果应该类似于:
finish,start
2020-01-16,2020-01-15
2020-01-17,2020-01-16
2020-01-18,2020-01-17
2020-01-19,2020-01-18
2020-01-20,2020-01-19
关于java - LocalDate 序列化 csv 时出现 jackson-dataformat-csv 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59730242/
我正在尝试计算 2 个 localDates 之间的天数 我从这个答案中获得灵感:https://stackoverflow.com/a/325964对于这个问题Determine Whether T
我在使用 Joda daysBetween 函数时遇到问题。它一直在告诉我 The method daysBetween(ReadableInstant, ReadableInstant) in th
初始问题: 在Scala中,我想使用隐式 Ordering[T]#Ops比较两个LocalDate . 它只是使用像 > 这样的“运算符”而不是isAfter . 它应该只是一个导入:import s
如何删除 localDate 中的 T? 我需要删除“T”以匹配数据库中的数据。 这是我的代码 DateTimeFormatter formatter = DateTimeFormatter.ofPa
这个问题已经有答案了: How to format LocalDate object to MM/dd/yyyy and have format persist (4 个回答) How can you
这个问题在这里已经有了答案: What is the difference between public, protected, package-private and private in Jav
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题在这里已经有了答案: Localdate.format, format is not applied (2 个答案) How to format LocalDate to string? (
这个问题在这里已经有了答案: Importing two classes with same name. How to handle? (11 个回答) 7年前关闭。 我正在练习如何处理日期。但是当我
根据 Joda 中的文档: public LocalDate(int year, int monthOfYear, int dayOfMonth, Chronology chron
我正在尝试开发一个独立于 GWT 的通用模块,直到它实际在 GWT 应用程序中使用为止。问题是 GWT 不支持 joda 并且我的模块不使用 GWT。 我想要实现的目标(这行不通): 最
问题:Spring 似乎对 LocalDate 使用不同的反序列化方法,具体取决于它是出现在 @RequestBody 还是请求 @ReqestParam -这是正确的吗?如果是这样,是否有办法将它们
我想使用 Java8 DateTime API 中的 LocalDate 和 LocalDateTime,并且在值为 null 时无法坚持到 postgresql date 和 timestamp。
我正在做以下编程练习:Unlucky Days 。声明如下: Friday 13th or Black Friday is considered as unlucky day. Calculate h
这个问题已经有答案了: Java 8 LocalDateTime is parsing invalid datetime (5 个回答) How to sanity check a date in J
我有一个包含以下字段的员工类。 class Employee { final int id; final String name; final LocalDate update
这个问题已经有答案了: If statement gives condition is always true (4 个回答) 已关闭 3 年前。 我试图将两个日期与日期列表进行比较(列表元素已被删除
被这个问题困扰了一段时间,希望得到一些意见。我想验证用户输入的日期,以便我可以使用 LocalDate 对象执行计算。但是,当输入有效日期时,返回的日期是前一个无效日期,这会引发异常并崩溃。我错过了什
这个问题已经有答案了: How can I parse/format dates with LocalDateTime? (Java 8) (11 个回答) 已关闭 3 年前。 我有一个日期时间信息字
我是一名优秀的程序员,十分优秀!