8
一、问题描述
HTTP form 方式提交时,框架解析参数会误报 field %s is not set
。
使用以下 api 文件,通过 goctl 生成项目
type UploadRequest {
Name string `json:"name" form:"name"`
Desc string `json:"desc,optional" form:"desc,optional"`
File string `json:"file,optional" form:"file,optional"`
}
type UploadResponse {
Code int32 `json:"code" form:"code"`
Message string `json:"message" form:"message"`
}
service upload {
@handler upload
post /api/v1/upload (UploadRequest) returns (UploadResponse)
}
通过 curl 命令请求:
curl -X "POST" "http://127.0.0.1:8888/api/v1/upload" \
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
--data-urlencode "name=test.png" \
--data-urlencode "desc=测试文件" \
--data-urlencode "file=aaaaa"
此时框架将会返回错误信息: field name is not set
,事实上数据已经传入,此时只需要将 name 设置为 optional
即可缓解此问题。
⚠️注意: 使用 optional
后可以缓解这个问题,逻辑层仍能拿到正确的值。
@kevwan