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.

swagger:parameters siguen apareciendo como parámetros de cadena de consulta

Tengo el siguiente controlador:

// Create database
// swagger:route POST /databases createDatabase
//
// Crear base de datos
//
// Seguridad:
//  oauth2:
//
// Respuestas:
//   202: Database
//   401: Error
//   ...
func (h Handler) Create(c *gin.Context) {
    var request CreateDatabaseRequest
    if err := handler.DataBinder(c, &request); err != nil {
        _ = c.Error(err)
        return
    }

    ...

}

Y la siguiente estructura que envío a través del cuerpo de la solicitud:

// CreateDatabaseRequest
// swagger:parameters createDatabase
// in: body
// required: true
//
// Parámetro de entrada para crear una base de datos
type CreateDatabaseRequest struct {
    Name    string `json:"name" binding:"required"`
    GroupId uint   `json:"groupId" binding:"required"`
}

Pero cuando genero mis documentos, las propiedades de la estructura CreateDatabaseRequest se muestran como dos parámetros de consulta individuales.

Puedo solucionarlo creando una estructura ficticia adicional como se define a continuación:

// swagger:parameters createDatabase
type _ struct {
    // Parámetro para crear una base de datos
    // in: body
    // required: true
    Body database.CreateDatabaseRequest
}

Pero realmente no me gusta eso y preferiría simplemente documentar mi parámetro de solicitud en su lugar.

¿Alguna idea sobre cómo puedo documentar correctamente mi estructura para que aparezca como un parámetro de cuerpo de solicitud en lugar de una cadena de consulta?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para documentar correctamente su estructura de modo que se muestre como un parámetro del cuerpo de la solicitud, debe agregar el campo content a su función controladora y especificar el tipo de contenido como application/json. Aquí está la función controladora actualizada:

    // Crear base de datos
    // swagger:route POST /databases createDatabase
    //
    // Crear base de datos
    //
    // Seguridad:
    //  oauth2:
    //
    // Respuestas:
    //   202: Database
    //   401: Error
    //   ...
    func (h Handler) Create(c *gin.Context) {
        // CreateDatabaseRequest
        // swagger:parameters createDatabase
        var request CreateDatabaseRequest
        if err := handler.DataBinder(c, &request); err != nil {
            _ = c.Error(err)
            return
        }
    
        // utilizar el parámetro de solicitud
    
        ...
    
        // swagger:response Database
        ...
        c.JSON(http.StatusAccepted, database)
    }
    
    // CreateDatabaseRequest
    // swagger:parameters createDatabase
    type CreateDatabaseRequest struct {
        // Nombre de la base de datos
        //
        // required: true
        // example: mydb
        Name    string `json:"name" binding:"required"`
        // ID de grupo de la base de datos
        //
        // required: true
        // example: 123
        GroupId uint   `json:"groupId" binding:"required"`
    }
    
    // swagger:response Database
    type Database struct {
        // la información de la base de datos
    }
    

    Tenga en cuenta que intercambiamos la posición de swagger:parameters y la estructura de solicitud CreateDatabaseRequest para que los campos de CreateDatabaseRequest se muestren como parámetros del cuerpo de la solicitud. También agregamos el campo example para mostrar valores de muestra para los campos Name y GroupId.

Comments are closed.