rest - 如何从请求中读取然后使用该结果来执行 POST 请求然后处理其结果

标签 rest proxy go

我正在尝试从请求中读取,然后使用该结果向另一个端点发出 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/

相关文章:

php - 防止 Shopsystem 的 "pending"付款

spring - HTTP 状态 500 - servlet 调度程序的 Servlet.init() 抛出异常

json - 人们如何处理 RESTful api 的身份验证(技术不可知)

hibernate - 删除grails域对象的代理部分?

https - squid ssl-bump 3.5.4:错误-协商FD 10上的SSL连接时出现错误:成功(0)

go - Terraform - 将 vendor aws-sdk-go 依赖项更新到最新的过程

java - 问题 : java. lang.UnsupportedClassVersionError: org/glassfish/jersey/servlet/ServletContainer

redirect - Nginx 配置代理传递给外部 ip 和端口 (https -> http)

go - GDB 中 goroutine 的展开堆栈,用于 golang exe 的核心转储

pointers - Golang 中的 *uint 和 uintptr 有什么区别?