考虑到我有这样的CSV:
name,city,active
abc,bcde,t
xyz,ghj,f
如果我想将此映射到模型,该如何将't'
或'f'
转换为正确的布尔值。我正在使用jackson-dataformat-csv
映射执行此操作
CsvSchema csvSchema = CsvSchema.emptySchema().withHeader().withNullValue("");
CsvMapper csvMapper = new CsvMapper();
csvMapper.setPropertyNamingStrategy(SNAKE_CASE);
csvMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MappingIterator<Article> iterator = csvMapper.readerWithTypedSchemaFor(Object.class).with(csvSchema).readValues(fileFromResponse);
List<Object> data = iterator.readAll();
当前映射失败,并显示以下错误消息:
Cannot deserialize value of type `java.lang.Boolean` from String "t": only "true" or "false" recognized
我可以在模式中指定以何种方式将't'或'f'视为布尔值。还是我可以反序列化的另一种方法?
您可以使用映射器为布尔类型注册自定义的JacksonModule:
private val YNToBooleanDeserializer = object : JsonDeserializer<Boolean>() {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Boolean {
return p.readValueAs(String::class.java) == "Y"
}
}
注册,使用:
csvObjectMapper.registerModule(SimpleModule().addDeserializer(Boolean::class.java, YNToBooleanDeserializer))