Мы используем Джексон для десериализации объектов Java (DTO) в направлении JSON для наших конечных точек. Это хорошо работает. Однако у меня есть немного странный вопрос.
Допустим, у нас есть объект User, и к нему прикреплены метаданные. Метаданные могут быть тем, о чем может думать клиент, поэтому это очень динамично.
Клиент может сделать запрос, чтобы получить определенные свойства метаданных определенного пользователя. Допустим, клиент хочет иметь следующие свойства метаданных: age и favouriteTree (потому что у некоторых людей есть одно, верно? Дело в том, что метаданные могут быть чем угодно, и мы не знаем этого заранее).
IЯ хотел бы вернуть следующий JSON:
{
"userId" : 1,
"age" : 22,
"favouriteTree" : "Maple Tree"
}
Я мог бы просто иметь Java POJO с int userId, int age и String favouriteTree. Таким образом, мы можем позволить Джексону десериализовать его в сторону JSON, и все хорошо.
Однако в следующий раз, когда клиент использует ту же конечную точку, он может запросить другие свойства, такие как: colorEyes и favouriteFood, в этом случае я бы хотел вернуть:
{
"userId" : 1,
"colorEyes" : "blue",
"favouriteFood" : "Pizza"
}
Теперь мне понадобится еще один Java POJO для таких метаданных, чтобы десериализовать его, как мы это обычно делаем. Но поскольку метаданные могут быть любыми, мы не можем этого сделать, потому что мы не хотим продолжать добавлять POJO к нашему коду, поскольку разные клиенты будут иметь разные потребности.
Существует ли общий способсделать это на Java?
Редактировать:
Я знаю, что мог бы сделать что-то вроде:
{
"userId": 1,
"metadata": [{
"key": "colorEyes",
"value": "blue"
},
{
"key": "favouriteFood",
"value": "Pizza"
}
]
}
Но я бы хотел этого избежать, если это возможно.