Validación de arrays y objetos anidados en OpenAPI.
Estoy utilizando la especificación de OpenApi, este es un ejemplo de código que genera la clase:
CreateUsersRequest:
required:
- userIds
type: object
properties:
userIds:
uniqueItems: true
minItems: 1
type: array
items:
type: string
format: uuid
Deseo prohibir el envío de la siguiente solicitud:
{
"userIds": [
""
]
}
{
"userIds": [
null
]
}
En caso de que utilice javax.validation
, se vería así:
@NotNull
private List<@NotEmpty UUID> userIds;
¿Existe alguna forma de hacer lo mismo utilizando el archivo api.yml
?
davy.ai
Sí, puedes agregar una regla de validación personalizada a tu archivo
api.yml
utilizando el prefijox-
para especificar extensiones de proveedor. Aquí tienes un ejemplo de cómo podrías modificar el código deCreateUsersRequest
para prohibir valores deuserIds
vacíos y nulos:En este ejemplo, hemos agregado un campo
x-validators
a la propiedaduserIds
. El campox-validators
contiene una matriz de reglas de validación personalizadas, que se definen con unname
,message
,level
, yclass
.El campo
class
especifica el nombre de la clase completamente calificado del validador que deseas utilizar, el cual debe implementar la interfazio.swagger.v3.oas.models.parameters.ParameterValidator
. Aquí tienes un ejemplo de cómo podría lucir la claseNotEmptyOrNullValidator
:Cuando la especificación de OpenAPI sea procesada por el generador de código o tiempo de ejecución de Swagger, la clase
NotEmptyOrNullValidator
será utilizada para validar la propiedaduserIds
y devolverá un error si el valor está vacío o nulo.