假设我有这样的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”应视为布尔值。或者还有其他方法可以反序列化它?
发布于 2019-12-27 10:44:21
您可以使用布尔类型的映射器注册自定义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))https://stackoverflow.com/questions/48023491
复制相似问题