Десериализация вложенных объектов без LinkedHashMap - PullRequest
0 голосов
/ 14 апреля 2020

Моя проблема в том, что у меня есть строка json с вложенными объектами, и Джексон использует LinkedHashMap при десериализации их. Как настроить Джексона так, чтобы он предпочитал тип HashMap при построении объектов?

mapper.readValue("{\"a\":\"b\":\"nes\"}", Map.class)

enter image description here

1 Ответ

0 голосов
/ 16 апреля 2020

AFAIK, для него нет конфигурации. Однако вы можете написать собственный десериализатор для Map.class. Примерно так:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Map.class, new JsonDeserializer<Map<?,?>>() {
        @Override
        public Map<?,?> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
            return jsonParser.getCodec()
                    .readValue(jsonParser, HashMap.class);
        }
    });
mapper.registerModule(module);
final Map<?, ?> map = mapper.readValue("{\"a\": {\"b\":1}}", Map.class);
assertEquals(HashMap.class, map.get("a").getClass());

Я не думаю, что это будет работать так же, как вы sh, однако, возможно, это поможет вам в исследованиях.

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