Necesito desarrollar una API Mule (4.4 Runtime) con openapi: 3.0.0 El punto final es un POST con la siguiente carga de solicitud:
{
"Employee": {
"Address": {
"City": "a",
"Country": "aaa"
}
}
}
Aquí está la sección relevante de la especificación OpenAPI 3.0:
openapi: "3.0.0"
paths:
/search:
post:
tags:
- SearchUser
summary: Search for Users
operationId: getUser
requestBody:
description: User Request Object
content:
application/json:
schema:
$ref: '#/components/schemas/RequestComp'
required: true
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ResponseComp'
'400':
description: Bad request
content: {}
'404':
description: User not found
content: {}
'405':
description: Validation exception
content: {}
components:
schemas:
RequestComp:
type: object
properties:
Employee:
$ref: '#/components/schemas/EmployeeComp'
EmployeeComp:
type: object
properties:
Address:
$ref: '#/components/schemas/AddressComp'
AddressComp:
type: object
properties:
City:
type: string
required: true
nullable: false
minLength: 1
Country:
type: string
required: true
nullable: false
minLength: 1
ResponseComp:
type: object
properties:
City:
type: string
Country:
type: string
Entonces, puedo validar elementos individuales como 'Ciudad' y 'País' para que no sean nulos, pero ¿cómo evito seguir la solicitud? (actualmente no está marcado como no válido:)
{
"Address": {
"City": "a",
"Country": "aaa"
}
}
Solución del problema
Puede definir el Employeecontenedor como una propiedad requerida y también rechazar propiedades desconocidas agregando additionalProperties: false. Tenga en cuenta que no requiredes un atributo de nivel de propiedad, sino un atributo de nivel de objeto: es una lista de propiedades requeridas.
components:
schemas:
RequestComp:
type: object
required: [Employee] # <-----
properties:
Employee:
$ref: '#/components/schemas/EmployeeComp'
additionalProperties: false # <-----
EmployeeComp:
type: object
properties:
Address:
$ref: '#/components/schemas/AddressComp'
additionalProperties: false # <-----
AddressComp:
type: object
required: [City, Country] # <-----
properties:
City:
type: string
# required: true # <-- remove this
nullable: false
minLength: 1
Country:
type: string
# required: true # <-- remove this
nullable: false
minLength: 1
additionalProperties: false # <-----
No hay comentarios:
Publicar un comentario