gpt4 book ai didi

python - 使用两个可能的名称验证输入字段

转载 作者:行者123 更新时间:2023-12-03 07:51:25 25 4
gpt4 key购买 nike

我正在迁移最初用 Python 编写的 API。Python API 允许您以camelCase 或snake_case 形式发送请求,如下所示:

这是允许的

{
"someInput": "nice"
}

这是允许的

{
"some_input": "nice"
}

这是使用一个很棒的 Python 库完成的:Pydantic

from pydantic import BaseModel

def to_camel(string):
words = string.split('_')
return words[0] + ''.join(word.capitalize() for word in words[1:])

class InputModel(BaseModel):
some_input: str

class Config:
alias_generator = to_camel
allow_population_by_field_name = True

这允许通过别名(someInput)或字段名称(some_input)创建InputModel。我想在 Go 中做相同或等效的事情。我正在使用 Gin :

func Routes(router *gin.Engine) {
v1 := router.Group("/v1")
{
v1.POST("/shipments", controllers.ShipmentCreator)
}
}

func ShipmentCreator(ctx *gin.Context) {
ResponseController := new(internal.OutputModel)
var body domain.ShipmentsInputModel
if err := ctx.BindJSON(&body); err != nil {
fmt.Println(err)
}
validate := validator.New()
err := validate.Struct(body)
if err != nil {
var validationErrors validator.ValidationErrors
errors.As(err, &validationErrors)
for _, validationError := range validationErrors {
ResponseController.AddError(internal.ErrorsModel{
Parameter: validationError.Field(),
Message: validationError.Error(),
})
}
ctx.JSON(http.StatusBadRequest, ResponseController)
return
}

我的输入结构看起来像这样:

type ShipmentsInputModel struct {
LotId string `json:"lotId" tag:"lot_id" alias:"lot_id" validate:"required"`
}

当我的输入是:

时,这不起作用
{
"lot_id": "someLotId"
}

它返回:

"message": "Key: 'ShipmentsInputModel.LotId' Error:Field validation for 'LotId' failed on the 'required' tag",

我怎样才能同时接受camelCase和snake_case?

最佳答案

实际上有一种方法可以通过结构体标记中的绑定(bind)标记来验证 Gin 中两个可能名称的输入,它允许您为同一字段指定多个键,作为示例,请参见下面的示例:

type ShipmentsInputModel struct {
LotId string `json:"lotId" json:"lot_id" binding:"required,lotId|lot_id"`
}

要了解有关验证和绑定(bind)的更多信息,请阅读此 https://gin-gonic.com/docs/examples/binding-and-validation/

关于python - 使用两个可能的名称验证输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77041507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com