登录
首页 >  Golang >  Go问答

将 HTTP 请求的错误响应转换为 JSON 数据

来源:stackoverflow

时间:2024-02-23 16:57:22 163浏览 收藏

大家好,我们又见面了啊~本文《将 HTTP 请求的错误响应转换为 JSON 数据》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我有一个公开的端点 http://localhost:8000/api/getcourses。收到对此端点的请求后,它会调用 getcoursedetails 方法,如下所示。

response, err := getcoursedetails(courseid) // response is a struct with multiple parameters, err is a struct with only title and message parameters
if err != nil {
   return geterrorjson(c,err) #this method sends an response with 409 or 422 as status code and an error struct in body
}

return c.json(http.statusok, response) // c is echo.context

当我使用邮递员对此进行测试时,一切正常,并且我得到了预期的输出。但我实际上要做的是从不同的程序调用这个端点。我这样做如下,

URL = http://localhost:8000/api/getCourses
body := make(map[string]string)
body[courseid] = "12345"

payload, _ = json.Marshall(body)
req, _ = http.NewRequest("POST",URL,bytes.NewBuffer(payload))
req.Header.Set("Context-Type","application/json",charset="UTF-8")

client = &http.Client{}

course = Course{} // Response will be of this type after unmarshalling

response, err := client.Do(req)
if err != nil {
    fmt.Println("ERROR OCCURED")
}

defer response.Body.close()

res, _ := ioutil.ReadAll(response.Body)
err = json.Unmarshall(res, &course)

if err != nil {
    fmt.Printf("ERROR: %+v",err)
}

fmt.Printf("COURSE DETAILS: %+v", course)

当交易成功完成时,即收到的状态为 200 时,此方法工作正常。在这种情况下,err 为 nil,我可以打印课程结构。但是,当响应具有某些不同的状态代码(409 或 422)时,这不起作用。那么如何修改客户端的代码以接收错误响应呢?


正确答案


伙计,只需检查 http 响应中的状态代码即可。

...

response, err := client.Do(req)
if err != nil {
    fmt.Println("ERROR OCCURED")
}

statusCode := response.StatusCode

// evaluate the status code...

...

终于介绍完啦!小伙伴们,这篇关于《将 HTTP 请求的错误响应转换为 JSON 数据》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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