У меня есть компонент в Джексоне, который использует метод @JSonAnySetter для хранения всех неизвестных параметров на карте.
@JSonAnySetter
handleUnkowns(String k, Object v)
{
myMap.put(k,v);
}
Я использую это как "Базовый компонент" для всех моих типов данных, так что, если данные отсутствуют, заполняются неизвестные параметры и данные не теряются ...., а не происходит падение Джексона.
Однако я хочу, чтобы сериализованная форма этих неизвестных НЕ была вложенной, то есть я хочу, чтобы сериализованные параметры находились на верхнем уровне объекта, когда объект сериализуется. Кроме того, я хочу, чтобы настраиваемые поля также были сериализованы:
//I want this map to be serialized/deserialized : {"collarWidth":10 "name":"fido"}
class Dog extens JSonBean
{
int collarWidth=0;
getCollarWidth(){return collarWidth;}
setCollarWidth(int x){collarWidth=x;}
}
Обратите внимание, что в приведенном выше случае - поскольку я расширяюсь от карты, произойдет пользовательская сериализация карты Джексона, и unknownParameters будет "полем" в моем json.
Таким образом, ожидаемая сериализация JSON будет
{"collarWidth": 10 "unknownParameters": {"name": "fido"}}
вместо
{"collarWidth": 10 "name": "fido"}
Итак, как проще всего «объединить» неизвестные параметры с известными, чтобы сериализатор Java-бинов сохранил ту же вложенность, что и входная строка?
Очевидное решение состоит в том, чтобы объединить параметры объекта "myMap" с сериализованной картой, но это кажется излишним, и я предполагаю, что эта проблема может иметь более элегантное решение.