Нужно ли регистрировать JavaTimeModule при использовании JDK 11? - PullRequest
0 голосов
/ 31 января 2020

Я только что узнал, что когда я использовал JDK 8, мне пришлось зарегистрировать JavaTimeModule, чтобы добавить поддержку java .time API.

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }

В противном случае я мог бы получить ошибку, подобную этой:

com.fasterxml.jackson.datab
ind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected VALUE_STRING

Однако, когда я перешел на JDK 11, я заметил, что он работает даже без регистрации модуля. Даже если я просто пытаюсь запустить одно и то же приложение на двух разных JDK (8/11) (без изменения версий других библиотек), оно все равно не работает для JDK 8 без регистрации модуля, но работает для JDK 11.

Я не могу найти никаких специфических c сериализаторов / десериализаторов, которые бы помогли JDK 11 справиться с этим самостоятельно. Было ли что-нибудь добавлено в JDK или другие библиотеки, чтобы не требовалось регистрировать новый JavaTimeModule? В противном случае я был бы очень осторожен, когда думал о факте добавления или пропуска этого.

1 Ответ

1 голос
/ 31 января 2020

Похоже, что текущее (связывание данных 2.11.x) поведение registerModule заключается в том, чтобы спокойно ничего не делать, если вы пытаетесь зарегистрировать модуль типа, который уже зарегистрирован, и если функция сопоставления IGNORE_DUPLICATE_MODULE_REGISTRATIONS имеет значение true. (Это верно по умолчанию.)

Итак, я предполагаю, что вы говорите, что модуль даты / времени автоматически регистрируется Java 11.

С другой стороны, он должен Также можно вручную зарегистрировать любой модуль независимо от автоматической регистрации.

Примечание: все это изменится в привязке данных 3.x. Для начала registerModule было удалено в ветке "master".

...