我正在尝试从请求中读取,然后使用该结果向另一个端点发出 POST 请求,然后处理其结果,然后以 JSON 格式返回其结果。
到目前为止我有以下代码:
// POST
func (u *UserResource) authenticate(request *restful.Request, response *restful.Response) {
Api := Api{url: "http://api.com/api"}
usr := new(User)
err := request.ReadEntity(&usr)
if err != nil {
response.WriteErrorString(http.StatusInternalServerError, err.Error())
return
}
api_resp, err := http.Post(Api.url, "text/plain", bytes.NewBuffer(usr))
if err != nil {
response.WriteErrorString(http.StatusInternalServerError, err.Error())
return
}
defer api_resp.Body.Close()
body, err := ioutil.ReadAll(api_resp.Body)
response.WriteHeader(http.StatusCreated)
err = xml.Unmarshal(body, usr)
if err != nil {
fmt.Printf("error: %v", err)
return
}
// result, err := json.Marshal(usr)
// response.Write(result)
response.WriteEntity(&usr)
fmt.Printf("Name: %q\n", usr.UserName)
}
我正在使用 Go Restful写入和读取包。
编译文件时出现此错误:
src\login.go:59: cannot use usr (type *User) as type []byte in argument to bytes.NewBuffer
解决此问题的最佳方法是什么,以便我可以正确地使用负载进行 POST?
最佳答案
您需要将数据结构编码为 byte slice 。像这样:
usrXmlBytes, err := xml.Marshal(usr)
if err != nil {
response.WriteErrorString(http.StatusInternalServerError, err.Error())
return
}
api_resp, err := http.Post(Api.url, "text/plain", bytes.NewReader(usrXmlBytes))
关于rest - 如何从请求中读取然后使用该结果来执行 POST 请求然后处理其结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25892330/