登录
首页 >  Golang >  Go问答

无法从Go Chi路由器中获取请求主体

来源:stackoverflow

时间:2024-02-28 18:36:24 442浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《无法从Go Chi路由器中获取请求主体》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

考虑 main/entry 函数中的以下代码

r := chi.newrouter()
    r.use(middleware.requestid)
    r.use(middleware.realip)
    r.use(middleware.logger)
    r.use(middleware.recoverer)

    r.post("/book", controllers.createbook)
    http.listenandserve(":3333", r)

和createbook函数定义为

func createbook(w http.responsewriter, r *http.request) {
    w.header().set("content-type", "application/json")
    var bookobj models.book
    err := json.newdecoder(r.body).decode(&bookobj)
    spew.dump(bookobj)
    collection := db.client.database("bookdb").collection("book")
    ctx, _ := context.withtimeout(context.background(), 5*time.second)
    insertresult, err := collection.insertone(ctx, bookobj)
    if err != nil {
        log.fatal(err)
    }
    json.newencoder(w).encode(insertresult)
  }

书籍模型

//exporting attributes here solved the issue
type Book struct {
    ID     primitive.ObjectID `json:"id,omitempty" bson:"id,omitempty"`
    name   string             `json:"name,omitempty" bson:"name,omitempty"`
    author string             `json:"author,omitempty" bson:"author,omitempty"`
    isbn   string             `json:"isbn,omitempty" bson:"isbn,omitempty"`
}

但是 json.newdecoder(r.body).decode(&bookobj) 不会解析任何内容,因为 req.body 为空,没有抛出错误,这是关于 chi 的 render 函数。

谁能帮我禁用 renderbind 函数 chi,我想仅通过 json 解码器解析正文。


解决方案


导出结构的所有字段解决了该问题。谢谢@mkopriva

type Book struct {
ID     primitive.ObjectID `json:"id,omitempty" bson:"id,omitempty"`
Name   string             `json:"name,omitempty" bson:"name,omitempty"`
Author string             `json:"author,omitempty" bson:"author,omitempty"`
ISBN   string             `json:"isbn,omitempty" bson:"isbn,omitempty"`

}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《无法从Go Chi路由器中获取请求主体》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>