es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes agregar una regla de validación personalizada a tu archivo api.yml utilizando el prefijo x- para especificar extensiones de proveedor. Aquí tienes un ejemplo de cómo podrías modificar el código de CreateUsersRequest para prohibir valores de userIds vacíos y nulos:

    CreateUsersRequest:
      required:
        - userIds
      type: object
      properties:
        userIds:
          uniqueItems: true
          minItems: 1
          type: array
          items:
            type: string
            format: uuid
          x-validators:
            - name: not-empty-or-null
              message: Los IDs de usuario no pueden estar vacíos ni ser nulos
              level: error
              class: com.example.validators.NotEmptyOrNullValidator
    

    En este ejemplo, hemos agregado un campo x-validators a la propiedad userIds. El campo x-validators contiene una matriz de reglas de validación personalizadas, que se definen con un name, message, level, y class.

    El campo class especifica el nombre de la clase completamente calificado del validador que deseas utilizar, el cual debe implementar la interfaz io.swagger.v3.oas.models.parameters.ParameterValidator. Aquí tienes un ejemplo de cómo podría lucir la clase NotEmptyOrNullValidator:

    package com.example.validators;
    
    import io.swagger.v3.oas.models.parameters.Parameter;
    import io.swagger.v3.oas.models.parameters.ParameterValidator;
    import io.swagger.v3.oas.models.parameters.Parameters;
    
    public class NotEmptyOrNullValidator implements ParameterValidator {
    
        @Override
        public void validate(final Parameter parameter, final String value, final Parameters parameters) {
            if (value == null || value.trim().isEmpty()) {
                throw new IllegalArgumentException("El parámetro " + parameter.getName() + " no puede ser nulo o vacío");
            }
        }
    }
    

    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 propiedad userIds y devolverá un error si el valor está vacío o nulo.

Comments are closed.