Spring Boot: десериализация свойств Dynami c из MongoDB - PullRequest
0 голосов
/ 06 мая 2020

У меня есть документ в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...