POJOベースのスキーマを作成するためにFasterXML Jackson CSVマッパーを構成しているにもかかわらず、適切な構成が提供されていないと主張します。私は、次の例外を取得:Jackson CsvMapperがスキーマ構成にかかわらず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(<generated>)
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<Person> 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<Person> out = mapper.reader(schema).readValue(lines.toString());
return out;
}
私は直接ストリームを読み取るMultipartFileこのようにisnteadを取り扱う理由で非常に簡単ですファイルとマッパーの間の不一致の行区切り文字の問題を解消しています(私はWindows上で作業します[私はダウン投票しません:]、マッパーのデフォルト行区切り文字は\n
。
データファイルは、この
のfirstName、lastNameの、年齢である
"ポール"、 "スミス"、 "22"
"ジェーン"、 "粗野"、 "98"
引用符を追加して削除しようとしました(デフォルトの文字列区切り記号)。私は年齢番号の引用符を使わずに試してみた。喜びはありません!
私はdocumentation他のSOの質問とブログ投稿を見ました。運がない。