Предположим, мне нужно сериализовать и десериализовать различные HashMaps, ключи которых могут быть нулевыми. AFAIK это не поддерживается по умолчанию. Итак, как это сделать наиболее кратко?
Важно то, что objectMapper должен продолжать работать так же, как и для любого другого типа.
Что я уже пробовал:< /p>
- Для сериализации я добавил собственный NullKeySerializer, который записывает «нулевую» строку в случае, если ключ карты равен нулю (см. ниже). Может ли это нарушить другие типы Java (не карты) во время сериализации? Кроме того, может быть, где-нибудь существует встроенный сериализатор? (Я нашел только com.fasterxml.jackson.datatype.jsr310.ser.key.Jsr310NullKeySerializer, но он помечен как устаревший).
Код: Выделить всё
objectMapper.getSerializerProvider().setNullKeySerializer(new JsonSerializer() {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeFieldName("null");
}
});
- Для десериализации единственное, что я нашел, это зарегистрировать модуль с помощью специального десериализатора.
Похоже в этом случае вам нужно указать тип возвращаемого значения, поэтому я не уверен, как это сделать в случае универсальных карт (это может быть Map или Map — в любом случае «null "строка должна быть преобразована в "настоящий" ноль). Опять же, может быть, для этого существует существующий десериализатор?
Подробнее здесь: https://stackoverflow.com/questions/784 ... th-jackson