【发布时间】:2020-04-21 01:20:05
【问题描述】:
我正在尝试使用 Jackson csv Mapper 读取 csv 文件并将条目映射到具有 LocalDate 字段的 Pojo。尝试解析文件时出现以下错误
无法构造
java.time.LocalDate的实例(没有创作者,比如 默认构造,存在):无字符串参数构造函数/工厂 从字符串值反序列化的方法('2019-12-01')\n [来源: (com.fasterxml.jackson.dataformat.csv.impl.UTF8Reader)
我已经尝试了其他答案中给出的方法,但仍然得到相同的结果,只有有效的注释是
@JsonDeserialize(使用 = LocalDateDeserializer.class)
我试图创建一个 Object Mapper 的 bean 并在我创建的应用程序配置文件中注册它的模块,但仍然没有效果。请有人帮助我
波乔
@Data
class TestImport{
@JsonProperty("start_date")
LocalDate startDate;
}
对象映射器配置:
@Bean
@Primary
public ObjectMapper objectMapper(){
ObjectMapper objectMapper=new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
文件读取代码:
public <T> List<T> read(Class<T> Entity, MultipartFile file) throws Exception{
InputStream inputStream = new BufferedInputStream(file.getInputStream());
CsvSchema schema = csvMapper.schemaFor(Entity).withHeader().withColumnReordering(true);
ObjectReader reader = csvMapper.readerFor(Entity).with(schema);
List<T> result= reader.<T>readValues(inputStream).readAll();
inputStream.close();
return result;
}
Pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-csv</artifactId>
<version>2.10.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.github.millij/poi-object-mapper -->
<dependency>
<groupId>io.github.millij</groupId>
<artifactId>poi-object-mapper</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
</dependencies>
【问题讨论】:
-
您可以将其读取为字符串并将其从日历或日期转换为本地日期吗?
-
您如何阅读这个
CSV文件?对于CSV,您需要使用CsvMapper -
你确定你创建的
ObjectMapper是被使用的那个吗? -
能否请您发布您的完整 pom.xml,以便我们知道使用的是哪个 Spring 版本并且没有其他代码干扰,请发布您用于读取 csv 的代码
-
我不确定是否正在使用对象映射器,但既然我给了它@Primary 注释,这应该可以工作吗?
标签: java spring-boot jackson