Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Kotlin Jackson CSV阅读器将列名映射到POJO?_Csv_Kotlin_Jackson - Fatal编程技术网

如何使Kotlin Jackson CSV阅读器将列名映射到POJO?

如何使Kotlin Jackson CSV阅读器将列名映射到POJO?,csv,kotlin,jackson,Csv,Kotlin,Jackson,大多数Jackson插件可以毫无问题地映射到不同的或无序的名称,但我在获取Jackson dataformat csv时遇到了麻烦。它忽略任何@JsonProperty,而是根据POJO成员在编译时的出现顺序进行填充。如果我先将CSV读入列表,然后就可以将其转换为POJO而不会出现任何问题。我是不是少了一面旗帜 琐碎的kotlin示例(请注意,CSV顺序有意不同于POJO顺序): 直接读卡器版本未使用正确的变量放置列BAD\u HEADER BAD。 地图阅读器版本将其正确放置 这里发生了什么?

大多数Jackson插件可以毫无问题地映射到不同的或无序的名称,但我在获取
Jackson dataformat csv
时遇到了麻烦。它忽略任何
@JsonProperty
,而是根据POJO成员在编译时的出现顺序进行填充。如果我先将CSV读入
列表
,然后就可以将其转换为POJO而不会出现任何问题。我是不是少了一面旗帜

琐碎的kotlin示例(请注意,CSV顺序有意不同于POJO顺序):

直接读卡器版本未使用正确的变量放置列
BAD\u HEADER BAD
。 地图阅读器版本将其正确放置


这里发生了什么?

我不知道这个jackson的bug,在解析CSV时我也遇到了一些问题


如果您仍然希望这样做,我创建了自己的CSV库,名为,因为在使用Jackson的CSV解析器时遇到了太多问题…

我不知道Jackson的错误,在解析CSV时我也遇到了一些问题

如果您仍然希望这样做,我创建了自己的CSV库,名为,因为Jackson的CSV解析器存在太多问题

class JacksonCSVTest {

    val sampleCsv = """
        A,c,BAD_HEADER BAD
        1,3,2
    """.trimIndent()

    class Foo {
        @JsonProperty("A")
        var a: Int = 0
        @JsonProperty("BAD_HEADER BAD")
        var b: Int = 0
        var c: Int = 0

        override fun toString(): String = "Foo(a=$a, b=$b, c=$c)"
    }

   @Test
    fun testDirectReader() {
        val csvMapper = CsvMapper()
        val schema = csvMapper.schemaFor(Foo::class.java).withHeader()
        val foos = csvMapper.readerFor(Foo::class.java).with(schema).readValues<Foo>(sampleCsv).readAll()
        val foo = csvMapper.convertValue(foos.single(), Foo::class.java)
        println(foo)
    }

    @Test
    fun testMapReader() {
        val csvMapper = CsvMapper()
        val schema = CsvSchema.emptySchema().withHeader()
        val map = csvMapper
            .readerFor(HashMap::class.java)
            .with(schema)
            .readValues<HashMap<String, String>>(sampleCsv)
            .readAll()
        val foo = csvMapper.convertValue(map.single(), Foo::class.java)
        println(foo)
    }
}
Foo(a=1, b=3, c=2)
 > testDirectReader (0.19s)
Foo(a=1, b=2, c=3)
 > testMapReader (0.01s)