在CSV映射期间将't'/'f'解析为布尔值

问题描述 投票:2回答:1

考虑到我有这样的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'视为布尔值。还是我可以反序列化的另一种方法?

java android csv jackson deserialization
1个回答
0
投票

您可以使用映射器为布尔类型注册自定义的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))
© www.soinside.com 2019 - 2024. All rights reserved.