我在golang项目中使用go-gin服务器,并从外部API获取一些数据,该API返回一个数组作为响应
[
{
"Continent": "South America",
"Countries": [
{
"Country": "Argentina"
}
]
}
]
在我的golang代码中,我是这样发送请求和截取响应的
client := &http.Client{Transport: tr}
rget, _ := http.NewRequest("GET", "http://x.x.x.x/v1/geodata", nil)
resp, err := client.Do(rget)
if err != nil {
fmt.Println(err)
fmt.Println("Failed to send request")
}
defer resp.Body.Close()
respbody, err := ioutil.ReadAll(resp.Body)
c.Header("Content-Type", "application/json")
c.JSON(200, string(respbody))
这给出了currect响应,但我得到的不是数组,而是整个数组的字符串。所以我得到的回应是
"[{\"Continent\":\"South America\",\"Countries\": [{\"Country\": \"Argentina\"} ] } ]"
如何将响应截取为数组而不是字符串?我甚至尝试了下面的方法,它确实给了我一个数组,但却是一个空白数组。响应主体中的元素可以是数组,也可以是字符串,因此内容是混合的。
type target []string
json.NewDecoder(resp.Body).Decode(target{})
defer resp.Body.Close()
c.Header("Content-Type", "application/json")
c.JSON(200, target{})
您的第一个示例不起作用,因为您试图将一个字符串封送为JSON,而JSON只会对该字符串进行转义。相反,将最后一行改为
c.String(200, string(respbody))
这根本不会改变您从第三方收到的字符串,只会返回它。请参阅此处了解差异。
如果您想在数据通过程序时检查数据,您必须首先将JSON字符串解码为如下结构数组:
type Response []struct {
Continent string `json:"Continent"`
Countries []struct {
Country string `json:"Country"`
} `json:"Countries"`
}
我有一个API请求,它在数组中返回一个refresh_token,如下所示: 我需要访问这个refresh_token的值,并使用它来查询另一个API。 为此,我尝试首先“ReadAll”响应正文,然后通过调用“刷新令牌”访问其中的密钥。 然而,它不起作用。有没有人知道如何解决这个问题,因为我不明白? 这是我的代码:
问题内容: 我看到 一吨 的条目在我的Tomcat日志(样品粘贴下面)。这些在几个月前进行次要版本升级(Spring Security 4.2.4,IIRC)后开始出现在我的日志文件中,因此,这显然是默认情况下启用的Spring新安全功能。这里报告了类似的问题,但是我的问题专门涉及如何在控制器中拦截这些异常。有一个针对此问题的Spring Security错误记录(提供一种处理RequestRej
我在Tomcat日志中看到大量条目(示例粘贴在下面)。在几个月前的一次小版本升级(Spring Security 4.2.4,IIRC)后,这些功能开始出现在我的日志文件中,因此这显然是Spring中默认启用的一个新的安全特性。这里报告了一个类似的问题,但我的问题具体涉及如何在控制器中拦截这些异常。这个问题有一个Spring Securitybug(提供一种处理RequestRejectedExc
放心,当我们这样做时 抛出的错误总是连续的,也就是说,如果状态代码失败,它不会检查contentType是否是JSON。 此外,抛出的错误始终是,断言错误(预期:200,实际:404)。无法从中了解实际响应是什么,如果启用日志记录,它将打印在标准输出上,但其他任何方式都不可用。 是否有任何方法来构建或设置类似于我们如何实现<code>过滤器 我有一个 rest api 框架,其中大多数验证都是使用
拦截文件 bp CreateFileA 创建或打开文件 (32位) bp OpenFile 打开文件 (32位) bp ReadFile 读文件 (32位) bp WriteFile 写文件 (32位) bp GetPrivateProfileStringA (ini文件)
拦截时间 bp GetLocalTime 获取本地时间 bp GetSystemTime 获取系统时间 bp GetFileTime 获取文件时间 bp GetTickCount 获得自系统成功启动以来所经历的毫秒数 bp GetCurrentTime 获取当前时间(16位) bp SetTimer 创建定时器 bp TimerProc 定时器超时回调函数