【问题标题】:Autowiring a CsvMapper自动装配 CsvMapper
【发布时间】:2020-11-30 16:03:20
【问题描述】:

我在我的 Spring Boot 应用程序上使用 Jackson 来进行 JSON 序列化/反序列化。

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

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

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

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

【问题讨论】:

    标签: spring spring-boot csv jackson


    【解决方案1】:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多