在rest api中,当主体设置为“{}”时,json解码器将不会生成错误。这使得有必要检查目标结构是否仍然是nil
。
我需要检查库是否应该像这样工作,或者这是否是一个问题。
// Client Side this request
req, err := http.NewRequest("POST", "url", strings.NewReader("{}") )
// Curl equivalent:
curl -X POST -d '{}' http://api:8080/r/primitives/multiply
// Server side
type Operands struct {
Values []float64 `json:"Values"`
}
func handler(req *http.Request, res *http.Response) (string, error) {
operands := Operands{}
err := json.NewDecoder(req.Body).Decode(&operands)
if err != nil {
res.StatusCode = 400
res.Status = http.StatusText(res.StatusCode)
http.StatusText(res.StatusCode)
return "", err
}
operands.Values[0] // It will fail here.
}
编辑1:解码器与空的主体“”一起正常工作,并生成错误,并且与正确的主体(例如这样)一起正常工作:
{"Values" : [ 5.0 , 2.0 ]}
编辑2:此处的问题在于,使用“{}”主体时,解码时不会返回错误,而是将目标结构保留为nil。 最佳答案
{}
只是一个空的Json对象,它将对您的Operands
结构进行很好的解码,因为该结构不需要在Operands
数组中包含任何内容。
您需要验证自己,例如
err := json.NewDecoder(req.Body).Decode(&operands)
if err != nil || len(operands.Values) == 0{
关于json - Golang在将“{}”主体解码为struct时不产生错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52316045/