json - golang json 解码,请求体为空

标签 json http go http-post

在下面的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/

相关文章:

forms - 使用 http.Client 创建一个损坏的表单

android - 如何使用 Map<String, Object> 或 List <object> 类在 Java 中反序列化嵌套的 Firebase 数据库?

api - “Shared” 网站和 RESTful API 认证

html - 使用 HTML 表单时如何在 HTTP 请求正文中发送数据?

security - 如果我可以使用 https,为什么还要使用相关协议(protocol)?

http - 如何在 golang 中获取 http 请求的初始时间戳?

go - 在领事模板中,如何限制我范围内的元素数量?

javascript - 使用 System.Web.Script.Serialization 从 C# 集合创建 JSON 数组

javascript - 为什么我的双引号作为单引号收到?

java - 从服务器读取 JSON (Java)