假设我有这样一个 CSV:
name,city,active
abc,bcde,t
xyz,ghj,f
如果我想将其映射到模型,我该如何将 't'
或 'f'
转换为正确的 boolean 值。我正在使用 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”应被视为 boolean 值。还是有其他方法可以反序列化它?
最佳答案
您可以使用 boolean 类型的映射器注册自定义 JacksonModule:
private val YNToBooleanDeserializer = object : JsonDeserializer<Boolean>() {
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Boolean {
return p.readValueAs(String::class.java) == "t"
}
}
注册,使用:
csvObjectMapper.registerModule(SimpleModule().addDeserializer(Boolean::class.java, YNToBooleanDeserializer))
关于java - 在 CSV 映射期间将 't'/'f' 解析为 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023491/