Все это неправильно работает в Open API Swagger 3.0

#java #swagger #swagger-ui #openapi

Вопрос:

В своем проекте я использую открытый API 3.0 для создания классов mmodel.

Мое требование состоит в том, чтобы я должен был повторно использовать атрибут родительского класса для подкласса.

Экс:

 public class Student {
  private String id;
  private String name;
}

public class Address {
  private String id;
  private String name;
  private String city;
  private String state;
}
 

Но проблема в том, что все они генерируют класс bean, как показано ниже, а не выше.

 public class Address {
  public Student student;
  private String city;
  private String state;
}
 

Ниже приведена моя схема.yaml

 Student:
    properties :
    id:
      type: integer
      format: int64
      description: The ID of the new account
    name:
      type: string
      description: The human-readable description of this account
    

Address:
    properties : 
    allOf:
        $ref : '#/Student'
    city:
       type: string
      description: City
    state:
      type: string
      description: State

  
 

Как убедиться, что свойства дублируются вместо создания объекта.

Любая помощь будет очень признательна!!!

Комментарии:

1.Похоже allOf , это не делает того, чего вы от него ожидаете. В соответствии с документацией Swagger allOf используется для композиции (это означает, что в вашем примере Address она состоит из ссылки на a Student и некоторых дополнительных полей).

2. Спасибо, Томас!!! Я понял цель всего этого. Есть ли какой-нибудь другой способ достичь того, что мне нужно?

Ответ №1:

Вы можете определить отдельные разделы под allOf элементом. Первый раздел-это ссылка на ваш родительский объект. Второй раздел-это объект с дополнительными свойствами.

Следующее правильно проанализировано в https://editor.swagger.io :

 openapi: 3.0.1
info:
  title: "example"
  version: "1.0"
paths:
  /example:
    post:
      responses:
        "200":
          description: example
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Address'
components:
  schemas:
    Student:
        properties:
          id:
            type: integer
            format: int64
            description: The ID of the new account
          name:
            type: string
            description: The human-readable description of this account
        
    Address:
      allOf:
      - $ref : '#/components/schemas/Student'
      - type: object
        properties:
          city:
             type: string
             description: City
          state:
            type: string
            description: State
 

Комментарии:

1. Спасибо, Джек. Но если я определяю так, я получаю ошибку «отказано в доступе». исключение java.io.FileNotFoundException: C:testsrcmain ресурсысхемаv0_1 (Доступ запрещен)

2. Возможно, вы используете spring security, тогда вам необходимо предоставить разрешение для папки ресурсов из вашего файла конфигурации безопасности : — .antMatchers(«/ресурсы/**»).PermitAll()