Джексон ObjectMapper игнорирует Hibernate5Module - PullRequest
0 голосов
/ 29 сентября 2019

У меня была следующая конфигурация Джексона.

@Configuration
public class JacksonConfiguration {
    @Bean
    public JavaTimeModule javaTimeModule() {
        return new JavaTimeModule();
    }

    @Bean
    public Jdk8Module jdk8TimeModule() {
        return new Jdk8Module();
    }

    @Bean
    public Hibernate5Module hibernate5Module() {
        return new Hibernate5Module();
    }

    @Bean
    public AfterburnerModule afterburnerModule() {
        return new AfterburnerModule();
    }

    @Bean
    ProblemModule problemModule() {
        return new ProblemModule();
    }

    @Bean
    ConstraintViolationProblemModule constraintViolationProblemModule() {
        return new ConstraintViolationProblemModule();
    }

}

Затем я добавил класс JsonUtil, который создает объект сопоставления объектов с модулями, описанными в JacksonConfiguration.class

@RequiredArgsConstructor
public class JsonUtil {

    private static ObjectMapper mapper;

    public static synchronized ObjectMapper getObjectMapper() {
        if (mapper == null) {
            mapper = new ObjectMapper();
            mapper.registerModule(new JavaTimeModule());
            mapper.registerModule(new Jdk8Module());
            mapper.registerModule(new Hibernate5Module());
            mapper.registerModule(new AfterburnerModule());
            mapper.registerModule(new ProblemModule());
            mapper.registerModule(new ConstraintViolationProblemModule());
        }
        return mapper;
    }
@Configuration
public class JacksonConfiguration {

    @Bean
    @Primary
    public ObjectMapper mapper() {
        return JsonUtil.getObjectMapper();
    }
}

Теперь, когда вызывается REST-контроллер, вызывается моя реализация objectmapper (JsonUtil.mapper).

Проблема в том, что у меня есть класс с переменным типом Instant, предыдущая версия десериализует его как datetime (или оставил егонетронутый, поскольку значение в базе данных является датой-временем), текущая реализация десериализуется до времени эпохи.

public class SomeClass  {

    // ...

    @NotNull
    @Column(name = "column3", nullable = false)
    private Instant someVariable;
}

До: "someVariable": "2018-10-23T08: 11: 00Z"
После: "someVarible ": 1540282260

Почему Джексон не может сериализовать эту переменную, как раньше, хотя я зарегистрировал все модули, которые были в классе JacksonConfiguration?

springBoot: 2.0.8

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