Cómo recortar espacios en blanco para consultas y JSON en Go Gin?
Tengo una estructura como esta:
type Data struct {
Foo string `json:"foo" binding:"required"`
}
Y uso ShouldBind para vincular la consulta o el cuerpo JSON a la estructura.
data := Data{}
err := ctx.ShouldBind(&data)
Me preguntaba cuál es la mejor práctica para recortar los espacios en blanco en el campo de texto.
transform {"foo": " bar "} a struct {"foo": "bar"}
He intentado usar un tipo de string personalizado y agregar una función UnmarshalJSON personalizada, pero no funcionará para ctx.shouldBind si es una consulta.
type Data struct {
Foo TrimSpaceString `json:"foo" binding:"required"`
}
type TrimSpaceString string
func (t *TrimSpaceString) UnmarshalJSON(data []byte) error {
data = bytes.Trim(data, "\"")
data = bytes.Trim(data, " ")
*t = TrimSpaceString(strings.TrimSpace(string(data)))
return nil
}
También intenté usar conform y agregar una etiqueta a la estructura. Pero tengo que agregar conform.Strings(data) después de vincularlo y no es conveniente.
type Data struct {
Foo TrimSpaceString `json:"foo" binding:"required" conform:"trim"`
}
err := ctx.ShouldBind(&data)
conform.Strings(&data)
¿Debería crear una vinculación personalizada y recortar la cadena dentro de la vinculación?
davy.ai
Sí, personalizar una vinculación es una buena solución para recortar los espacios en blanco en el campo de texto. Puedes crear una vinculación personalizada y sobreescribir el método Bind para recortar los valores de texto antes de la vinculación a la estructura.
Aquí hay un ejemplo de cómo crear una vinculación personalizada para go-gin:
Ahora puedes usar CustomBinding cuando vincules los datos a tu estructura:
Esto recortará los espacios en blanco para todos los campos de texto en tu estructura.