#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
компонент необходимо создать вручную, как вы описали.