自动装配 CsvMapper

Autowiring a CsvMapper

我在 Spring 引导应用程序上使用 Jackson 来执行 JSON serialization/deserialization.

我可以自动装配常规的 ObjectMapper,Spring 将自动注册 Jdk8Module 和 JavaTimeModule。

现在我需要解析和编写一些 .csv 文件。目前,当我构建一个CsvMapper时,我需要手动注入上述模块:

var mapper = new CsvMapper()
            .registerModule(new Jdk8Module())
            .registerModule(new JavaTimeModule());

我想知道这是否真的有必要。对于常规的 ObjectMapper,Spring 以某种方式检测类路径中的那些模块并注册它们。我在这里错过了什么?

Spring 使用 Jackson2ObjectMapperFactoryBean 创建一个 ObjectMapper bean。如果类路径中存在多个模块,则会自动注册它们:

  • jackson-datatype-jdk7:支持 Java 7 种类型,例如 Path
  • jackson-datatype-jdk8:支持其他 Java 8 种类型,例如 Optional
  • jackson-datatype-jsr310:支持 Java 8 种日期和时间 API 类型
  • jackson-datatype-joda:支持 Joda-Time 类型
  • jackson-module-kotlin:支持 Kotlin 类 和数据 类

据我所知,Spring 不提供 CsvMapper 工厂 bean。因此,需要像您描述的那样手动创建一个 CsvMapper bean。