Мы проектируем и разрабатываем корпоративное приложение, используя Spring Boot для REST API и Angular 8 в качестве веб-клиента. Прошел год с тех пор, как мы начали.
Когда я начал, я прочитал несколько статей, которые очистили мое понимание того, почему REST без HATEOAS на самом деле не REST. Я продолжил работу над доступным на тот момент проектом Spring HATEOAS , который был тогда на v0.25 (не стабильный), но достаточно хорош, чтобы начать нас.
Теперь он перешел на стабильный 1 .x версии и мы обновились до нее.
На стороне базы данных мы широко используем MongoDB для хранения более 1 ТБ данных, и структура наших документов немного странная. Он содержит динамические c ключи вместо стандартных c ключей. Например, то, что могло быть сохранено так:
{
name: "Sean",
manager: "Rick",
skills: ["java", "javascript"]
}
в основном хранится как:
{
"Rick": {
"Sean": ["java", "javascript"],
... //more people here
}
}
Не вините меня за структуру. Это было решено архитектором 5 лет go по некоторым тогда соответствующим причинам. Затраты на переделку всей конструкции огромны, и заказчик не хочет go за это.
Но это нормально! У нас просто есть один существенный недостаток в использовании этой структуры, то есть мы не можем использовать ODM, такой как Spring Data MongoDB, для его полного потенциала из-за динамических ключей c повсюду.
Есть некоторые преимущества использования этой структуры, но это выходит за рамки вопроса.
Поэтому мы просто используем предоставленный им шаблон и запускаем собственные запросы, и в результате получаем Map
Map
из Map
... и т. д., в зависимости от того, насколько вложенной является структура.
Теперь, согласно этой структуре, один документ (Entity) в коллекции MongoDB содержит данные для нескольких люди (Ресурс).
Итак, мы ломаем наши так называемые классы сущностей (в основном карту), чтобы создать несколько классов ресурсов. Это преобразование 1. Объект карты выдаст много объектов ресурса. .
Теперь согласно концепции spring-hateoas
один объект объекта будет преобразован в один объект ресурса (теперь называется * 1033). *) и класс RepresentationModelAssemblerSupport
преобразует объект-сущность в объект модели с помощью функции toModel
.
Вопрос: Как сделать один класс Entity стандартным способом для преобразования в несколько объектов PresentationModel? чтобы позже я мог использовать функцию связывания?