У меня есть документ в Mon go, в котором есть коллекция дочерних объектов. Каждый из этих дочерних объектов может иметь различный набор свойств, хотя некоторые из них будут общими друг с другом. Например:
MongoDB Document
----------------
{
"_id" : "c2fd5c97-0185-4369-87f0-5cc98fe901e7",
"steps" : [
{
"className" : "models.steps.texttrivia.TextTriviaStep",
"ttid" : "486345a5-7c0b-4105-90e6-e6ecb1da7ece",
"id" : "efdd37bf-ca2f-4f5f-b9b3-c4fbcca090b2"
},
{
"className" : "models.steps.texttrivia.ArticleStep",
"aid" : "394e24e4-8fad-11ea-94fe-cba9eeab8ec6",
"id" : "52c5a3ac-8fad-11ea-94fe-cba9eeab8ec6"
}
]
}
Java Objects
------------
@Document(collection="Break")
public class Break {
@Id
private String id;
private List<BreakStep> steps;
// etc...
}
public class BreakStep {
@Field("id")
private String id;
private String className;
// etc...
}
Проблема в том, что каждый из этих объектов BreakStep имеет свойство с именем, которое изменяется в зависимости от класса, из которого он был десериализован. Я не могу понять, как заставить Spring десериализовать данный BreakStep в соответствующий класс (например, TextTriviaStep или ArticleStep), и я не могу заставить эти свойства Dynami c десериализовать в карту с помощью @JsonAnySetter.
Я выполнил инструкции здесь: https://www.baeldung.com/jackson-mapping-dynamic-object
Не повезло. Может кто-то указать мне верное направление? Я хотел бы иметь возможность либо преобразовать каждый отдельный шаг в отдельный класс, наследуемый от BreakStep, либо согласиться на то, чтобы все свойства Dynami c были помещены в карту, являющуюся свойством BreakStep.