Как можно исправить отсутствующую функцию десериализации / демаршалинга объекта запроса в сгенерированном Java-коде из openagi 3 swagger source - PullRequest
0 голосов
/ 17 мая 2019


Здравствуйте,
в использовании Swagger я новичок.
Но я не новичок в использовании генераторов кода. Я даже создал несколько из них для разных компаний.

Прежде всего, я создал воспроизводимый пример файла Swagger, чтобы вы могли понять мою проблему (см. Ниже).

openapi: "3.0.0"
info:
  title: Example for the not work swagger (de)serialization.
  version: 1.0.0
  license:
    name: No license
    url: https://choosealicense.com/no-permission/
servers:
  - url: http://localhost:9080/example
paths:
  /search:
    get:
      operationId: searchIt
      parameters:
      - name: q
        in: query
        description: >-
          A search object as one query paramater which was (de)serialized to/from
          the url als the simple types. Like described in
          "https://swagger.io/docs/specification/serialization/#query"
        required: true
        style: form
        explode: true
        schema:
          $ref: '#/components/schemas/SearchQuery'
      responses:
        200:
          description: A mandantory description.
          content:
            text/plain:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SearchResult'
components:
  schemas:
    SearchQuery:
      type: object
      properties:
        start:
          type: string
        limit:
          type: integer
          format: int32
        FOO:
          type: string
        BAR:
          type: string
    SearchResult:
      type: object
      required:
        - entries
        - next
      properties:
        entries:  
          type: array
          items:
            $ref: '#/components/schemas/Entry'
        next:
          type: string
    Entry:
      type: object
      properties:
        id:  
          type: integer
        foo:
          type: string
        baz:
          type: string
      required:
      - id

Если вы загрузили его в онлайн-редактор Swagger , вы не увидите ошибок, предупреждений или проблем. Если вы теперь имитируете вызов к конечной точке (Try Out) в этом редакторе, вы должны ввести значения search как объект Json. Без изменений и после выполнения вы увидите сгенерированный URL:

http://localhost:9080/example/search?start=string&limit=0&FOO=string&BAR=string

Это показывает, что редактор может сериализовать объект запроса.

Пока все хорошо, что значит без проблем.

Действительно

Если вы позволите теперь сгенерировать сервер «jaxrs-jersey», загрузите сгенерированный zip-файл и запустите сгенерированную демоверсию через mvn package jetty:run, вы получите ModelValidationException . Игнорировать это Предупреждение не очень хорошая идея, потому что если вы введете вышеуказанный URL в браузере своего доверия, вы получите HTTP 503.
Сгенерированный Java-клиент имеет аналогичный недостаток.

Ohmmm ...

В настоящее время, после всего моего расследования, например, когда я спрашивал старшего брата и подобные платформы, у меня возникает подозрение, что просто было забыто реализовать функции десериализации в генераторах кода. Или, может быть, только забыл сгенерировать правильные аннотации. Но я надеюсь, что нет.

Кто-нибудь знает, как я могу решить проблему с генераторами кода?
В первую очередь это означает, что я должен изменить в приведенном выше файле Swagger, что генераторы кода могут выполнять всю (целую) работу. Или, может быть, кто-то знает другие генераторы кода для Java, которые могут обрабатывать вышеуказанный файл Swagger.

Спасибо.

...