我正在發火并忘記接受http POST請求并從請求正文中收集所需資料的微服務,然后請求正文中的給定URL。
我遇到的問題是輸入資料中的標頭數量是動態的,這意味著可以有 1 個或多個標頭。它不同。
因此,我將傳入的 requestBody 讀取為以下結構:
type Request struct {
Headers json.RawMessage `json:"headers"`
Method string `json:"method"`
Body json.RawMessage `json:"body"`
}
type Event struct {
Url string `json:"url"`
Request Request `json:"request"`
}
和:
var newEvent Event
reqBody, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Fprintln(w, err)
}
err2 := json.Unmarshal(reqBody, &newEvent)
if err2 != nil {
fmt.Fprintln(w, err2)
}
創建請求時,主體很容易傳遞:
req, err := http.NewRequest(newEvent.Request.Method , newEvent.Url, bytes.NewBuffer(newEvent.Request.Body))
if err != nil {
panic(err)
}
但是在設定標題時,我找不到任何巧妙的方法來傳遞 json.RawMessage 格式。理想情況下,我只想做這樣的事情:
req.Header = http.Header{newEvent.Request.Headers}
是否有任何智能解決方案,或者我是否必須選擇將標頭解組為字串,然后決議字串并將它們全部添加http.Header.Add()?
uj5u.com熱心網友回復:
是否有任何聰明的解決方案 [...]
不。
[...] 還是我必須選擇將標頭解組為字串,然后決議字串并使用 http.Header.Add() 將它們全部添加?
是的。
(除非您重新設計輸入并擺脫 json.RawMessage。)
一般來說,Go 中沒有捷徑、沒有巧妙的技巧、魔術豆或語法糖來避免一些代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510071.html
標籤:json去http头
下一篇:決議嵌套的JSON結構
