Java Джексон выбирает зарегистрированный модуль из нескольких модулей для сериализации JSON в виде строки? - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть простой java класс, и я хочу сериализовать его для различных JSON выходов. Например:

Class User {
    public int id; 
    public String name;
} 

// 2 expected outputs
Version 1 (V1): {"id": "1", "first_name": "A"} 
Version 2 (V2): {"id": "1", "name": "A"}

Я создал 2 пользовательских модуля для записи в JSON String, и они зарегистрированы в одном ObjectMapper, как показано ниже:

public class ItemSerializerModuleV1 extends SimpleModule {

    public ItemSerializerModuleV1() {
        super(NAME, VERSION_UTIL.version());
        addSerializer(Item.class, new ItemSerializerV1());
    }
}

public class ItemSerializerModuleV2 extends SimpleModule {

    public ItemSerializerModuleV2() {
        super(NAME, VERSION_UTIL.version());
        addSerializer(Item.class, new ItemSerializerV2());
    }
}

ObjectMapper mapper = new ObjectMapper();
mapper.registerModules(new ItemSerializerModuleV1(), new ItemSerializerModuleV2());

Однако, Я не Не знаю, как выбрать, какой модуль следует использовать для ObjectMapper, когда он записывает в JSON строку . Он выбирает только модуль V2 (последний зарегистрированный модуль) с кодом ниже, в то время как я также хочу написать как V1.

String serialized = mapper.writeValueAsString(myItem);

1 Ответ

0 голосов
/ 19 февраля 2020
Модули

могут использоваться для расширения функциональности, предоставляемой ObjectMapper, например, путем добавления провайдеров для пользовательских сериализаторов и десериализаторов. Вы не можете выбрать модуль для определенной сериализации или отключить модуль после его регистрации.

Таким образом, у вас должно быть два экземпляра ObjectMapper, и каждый экземпляр будет зарегистрирован другим модулем.

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