Здравствуйте,
в использовании 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.
Спасибо.