У меня есть серверная часть NestJ, в которой я хочу сгенерировать схему JSON из моих @ nestjs / swagger аннотаций для проверки (с AJV ).Это работает довольно хорошо, но у меня есть конечная точка, где я использую параметры @Query.Я создал DTO и правильно аннотировал свойства с помощью @ApiModelProperty и использую его для соответствующего параметра @Query.Документ swagger хорош, но когда я генерирую свою схему JSON, что мне нужно для проверки, я не получаю раздел definitions
, где схема для моего DTO определяется нормально.Если я использую свой DTO на @Body, он работает довольно хорошо.
Вот пример DTO:
export class Cat {
@ApiModelProperty()
public name!: string;
@ApiModelProperty()
public breed!: number;
}
Конечная точка:
@Get('cat')
public async cat(@Query() cat: Cat) {
return cat;
}
Это приведет к:
И, к сожалению, для JSON без секции definition
и параметры запроса будут выглядеть так:
"paths": {
"/animals/cat": {
"get": {
"parameters": [
{
"type": "string",
"name": "name",
"required": true,
"in": "query"
},
{
"type": "string",
"name": "breed",
"required": true,
"in": "query"
}
],
"responses": {
"200": {
"description": ""
}
},
"tags": [
"animals"
],
"produces": [
"application/json"
],
"consumes": [
"application/json"
]
}
},
Теперь я изменяю только @Query на @Body:
@Get('cat')
public async cat(@Body() cat: Cat) {
return cat;
}
Теперь результат JSON будет выглядеть следующим образом:
"paths": {
"/animals/cat": {
"get": {
"parameters": [
{
"name": "Cat",
"required": true,
"in": "body",
"schema": {
"$ref": "#/definitions/Cat"
}
}
],
"responses": {
"200": {
"description": ""
}
},
"tags": [
"animals"
],
"produces": [
"application/json"
],
"consumes": [
"application/json"
]
}
},
И с требуемый definitions
раздел (с помощью которого я могу проверять свои объекты, используя AJV ):
"definitions": {
"Cat": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"breed": {
"type": "string"
}
},
"required": [
"name",
"breed"
]
}
}
Учитывая это, мне будет хорошо с одним из этих двух решений:
- Каким-то образом, как я могу "принуждать" @ nestjs / swagger всегда генерировать
definitions
разделы моих определенных DTO в сгенерированном JSON.файл схемы JSON только для моих DTO.Другими словами, допустимый файл схемы JSON, который содержит (только) раздел definitions
, потому что это то, что мне нужно для проверки моих DTO.
Мотивация для этого, как правило, состоит в том, чтобы аннотировать толькомоя программа с аннотациями swagger, а затем получить из нее документацию и схему проверки для моих DTO.Если у вас есть другое решение или я что-то делаю не так, пожалуйста, дайте мне знать.Такие библиотеки, как class-validator не являются решением, потому что тогда мне нужно две ( duplication !) Аннотации для всех моих DTO.Мне известна проблема , которая относится к этой проблеме, но я хочу обойти одно из двух решений, которые я упомянул выше.