Пружинный ботинок HATEOAS с объектом модели swagger

#spring #spring-boot #swagger #spring-hateoas

Вопрос:

Я пытаюсь реализовать HATEOAS на текущей конечной точке Rest в проекте Spring boot. В проекте используется модель swagger для объекта запроса и ответа.

 /order/findAllOrders:
    get:
      tags:
      - "orders"
      summary: "Finds Orders by status"
      description: "Multiple Orders"
      operationId: "findAllOrders"
      produces:
      - "application/xml"
      - "application/json"
      parameters:
      - name: "status"
        in: "query"
        description: "Status values that need to be considered for filter"
        required: true
        type: "array"
        items:
          type: "string"
          enum:
          - "wip"
          - "pending"
          - "completed"
          default: "completed"
      responses:
        "200":
          description: "successful operation"
          schema:
            type: "array"
            items:
              $ref: "#/definitions/OrderCollection"
        "400":
          description: "Invalid status value"
......
.....
definitions:
  Order:
    type: "object"
    properties:
      orderId:
        type: "integer"
        format: "int64"
      orderItem:
        type: "String"
        description: "order item"
      ....
      ....
  OrderCollection:
    type: "object"
    properties:
      orders:
        type: array
        items:
          $ref: "#/definitions/Order"
      ....
      ....
 

Конечная точка Rest в настоящее время возвращает следующий объект(рассмотрим, например):

 OrderCollection {
  String param1;
  String param2;
  String param3;
  List<Order> orders;
}

Order {
 String orderId;
 String orderItem;
 ......
 ......
}
 

Я хочу добавить ссылку на каждый заказ, для этого я должен расширить модель представления.
Порядок объектов и коллекция заказов уже созданы с помощью swagger.

В настоящее время я мог думать только о создании дубликатов классов объектов для

 OrderLink extends RepresentationModel<OrderLink > {
  String Order;/**--- Order object from Swagger-----*/
  ....
}

OrderLinkCollection {
  String param1;
  String param2;
  String param3;
  List<OrderLink> orderLinks;
}
 

Есть ли элегантный способ справиться с этим без создания дубликатов классов объектов? Могу ли я расширить объекты из библиотеки spring lib до API swagger?