在下面的http处理程序中,我尝试区分请求正文是否为空
type Request struct {
A bool `json:"lala"`
B bool `json:"kaka"`
C int32 `json:"cc"`
D int32 `json:"dd"`
}
var (
opts Request
hasOpts bool = true
)
err = json.NewDecoder(r.Body).Decode(&opts)
switch {
case err == io.EOF:
hasOpts = false
case err != nil:
return errors.New("Could not get advanced options: " + err.Error())
}
但是,即使 r.Body
等于 '{}'
,hasOpts
仍然是 true
。这是可以预料的吗?在这种情况下,我应该如何检测空请求正文?
最佳答案
首先读取正文,检查其内容,然后对其进行解码:
body, err := ioutil.ReadAll(r.Body)
if err != nil {
return err
}
if len(body) > 0 {
err = json.Unmarshal(body, &opts)
if err != nil {
return fmt.Errorf("Could not get advanced options: %s", err)
}
}
关于json - golang json 解码,请求体为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816632/