Автоматическое подключение CsvMapper

#spring #spring-boot #csv #jackson

#spring #весна-загрузка #csv #джексон

Вопрос:

Я использую Jackson в своем приложении Spring Boot для выполнения сериализации / десериализации JSON.

Я могу автоматически подключить обычный ObjectMapper, и Spring автоматически зарегистрирует Jdk8Module и JavaTimeModule.

Теперь мне нужно проанализировать и записать несколько файлов .csv. На данный момент, когда я создаю CsvMapper, мне нужно вручную ввести вышеупомянутые модули:

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

Мне интересно, действительно ли это необходимо. Для обычного ObjectMapper Spring каким-то образом обнаруживает эти модули в пути к классу и регистрирует их. Чего мне здесь не хватает?

Ответ №1:

Spring использует Jackson2ObjectMapperFactoryBean для создания ObjectMapper компонента. Несколько модулей автоматически регистрируются, если они присутствуют в пути к классу:

  • jackson-datatype-jdk7: поддержка типов Java 7, таких как Path
  • jackson-datatype-jdk8: поддержка других типов Java 8, таких как Optional
  • jackson-datatype-jsr310: поддержка типов API даты и времени Java 8
  • jackson-datatype-joda: поддержка типов времени Joda
  • jackson-module-kotlin: поддержка классов Kotlin и классов данных

Насколько я знаю, Spring не предоставляет компонент CsvMapper factory. Поэтому CsvMapper компонент необходимо создать вручную, как вы описали.