Как создать класс Java, содержащий карту известных и неизвестных пар ключ-значение?JAVA

Программисты JAVA общаются здесь
Anonymous
Как создать класс Java, содержащий карту известных и неизвестных пар ключ-значение?

Сообщение Anonymous »


Я пытаюсь создать класс Java для хранения результатов десериализации сообщения в формате JSON. Сообщение имеет простую структуру:

{ "appId": "MyApp", "действие": "Обновить", "entityType": "Свойство", "сущность": { "marketId": "abc123", "propertyId": "def456", "name": "Центральный вокзал", "hasFoo": правда, «hasBar»: ложь, "areaInSf": 30 000 ... еще пары ключ-значение... } } В entity поля идентификатора и имени являются обязательными, и их имена известны. Может быть произвольное количество других свойств, которые я также хочу десериализовать — они не являются обязательными, и я не знаю всех имен заранее.

Если я имею дело только с известными полями, я могу создать модель Java, например

Сообщение публичного класса { общедоступная строка appId; публичное действие String; общедоступная строка типа объекта; публичная организация; } общественный класс Entity { публичная строка marketId; публичная строка propertyId; публичное имя строки; } и десериализуйте JSON с помощью Джексона, например:

ObjectMapper om = новый ObjectMapper(); Сообщение myMessage = om.readValue(myJsonString, Message.class); Но как мне быть с необязательными полями в сообщении? Это плоские однотипные поля идентификатора и имени, а не вложенная карта, поэтому я не могу этого сделать.

публичный класс Entity { публичная строка marketId; публичная строка propertyId; публичное имя строки; общественная картаotherFields; // hasFoo, hasBar, areaInSf ... } Я предпочитаю строго типизированный Entity, чтобы можно было проверять аспекты обязательных полей — минимальную длину идентификатора и т. д. В противном случае Entity может быть просто code>Карта. Чтобы получить доступ к полям, я просто перебираю свойства карты. Но я хочу иметь возможность извлекать необходимые поля по имени и, если возможно, перебирать только оставшиеся поля.

Как спроектировать Entity POJO, чтобы можно было десериализовать как поля, объявленные в определении класса, так и некоторые дополнительные поля, найденные во входном JSON?

Вернуться в «JAVA»