Как заставить Spring фактически использовать настроенный сериализатор LocalTime? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь заставить Spring (Spring Boot 2.2.4) сериализовать LocalTime экземпляры как "hh:mm:ss" вместо массивов [h, m, s]. До сих пор я пытался:

Настройка spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMP=false в application.properties

Переопределение конфигурации ObjectMapper:

@Bean
@Primary // needed? Who knows
open fun mapper(): ObjectMapper {
  val mapper = ObjectMapper()
  val javaTimeModule = JavaTimeModule()
  // attempt 1
  javaTimeModule.addSerializer(LocalTime::class.java, myCustomSerializer)
  mapper.registerModule(javaTimeModule)
  // attempt 2
  mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
  return mapper
}

Для попытки 1 я могу увидеть, что модуль зарегистрирован, но если я переопределю методы serialize или serializeWithType, они никогда не будут вызваны. Попытка 2 просто не имеет никакого эффекта.

Как заставить Spring фактически вызвать пользовательский ObjectMapper? Даже намек на то, что я могу попытаться понять, почему он не вызывается, может помочь.

1 Ответ

2 голосов
/ 12 марта 2020

При определении ObjectMapper самостоятельно или при добавлении @EnableWebMvc в вашу конфигурацию Spring Boot не сможет настроить ObjectMapper. В свою очередь, он также делает свойства spring.jackson (и другие spring.mvc, spring.multipart et c) бесполезными, поскольку теперь предполагается, что вы настраиваете вещи вручную.

По сути, у вас не должно быть ни одного из них и, следовательно, добавление spring.jackson.serialization.write-dates-as-timestamps=false должно сделать все, что нужно сделать.

Если это не сработает, проверьте @EnableWebMvc и / или предварительно настроенный ObjectMapper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...