csv反序列化_csv反序列化_尽管有架构配置,但Jackson CsvMapper无法正确反序列化为POJO...

由于某些原因,尽管配置了FasterXML Jackson CSV映射器来创建基于POJO的架构,但它坚持认为没有提供合适的配置。我收到以下异常:

com.fasterxml.jackson.databind.JsonMappingException: No value type configured for ObjectReader

com.fasterxml.jackson.databind.ObjectReader._findRootDeserializer(ObjectReader.java:1371)

com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1265)

com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:897)

aol.model.core.services.admin.CSVParserService.parseCSVFileStreamAsClass(CSVParserService.java:42)

aol.rest.controller.AdminController.importCsvData(AdminController.java:30)

aol.rest.controller.AdminController$$FastClassBySpringCGLIB$$b9304c43.invoke()

org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)

...我的POJO非常简单

@JsonPropertyOrder({"firstName", "lastName", "age"})

public class Person {

String firstName;

String lastName;

Integer age;

public Person() {} //no other use than to avoid no-suitable-construction found issue

//getters and setters omitted for brevity

}我的解析代码是

public MappingIterator parseCSVFileStreamAsClass(MultipartFile file) throws IOException {

StringBuilder lines = new StringBuilder();

String lineSeparator = System.getProperty("line.separator");

try(BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {

for (String r = reader.readLine(); r != null; r = reader.readLine()) {

lines.append(r).append(lineSeparator);

}

}

CsvMapper mapper = new CsvMapper();

CsvSchema schema = mapper

.schemaFor(Person.class)

.withHeader()

.withLineSeparator(lineSeparator);

MappingIterator out = mapper.reader(schema).readValue(lines.toString());

return out;

}我以这种方式处理MultipartFile的原因不是直接读取流,而是消除了文件和映射器之间不匹配行分隔符的问题(我在Windows上工作[不要向下投票给我:(],并且映射器的默认行分隔符只是\n。

数据文件是这样的

firstName,lastName,age

"Paul","Smith","22"

"Jane","Crass","98"

我尝试添加和删除引号(默认字符串分隔符)。我尝试了没有年龄编号的引号,然后加上绝望。没有快乐!

我查看了documentation其他SO问题以及博客文章。没有运气。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值