[zeromicro/go-zero]httpx.Parse 能否先判断ContentType再分析form和json类型

2024-01-12 913 views
9

在api中tag中json和form同时存在时,先进行form,传递的是json也会报“field xxx not set”,查看代码:

// Parse parses the request.
func Parse(r *http.Request, v interface{}) error {
    if err := ParsePath(r, v); err != nil {
        return err
    }

    if err := ParseForm(r, v); err != nil {
        return err
    }

    if err := ParseHeaders(r, v); err != nil {
        return err
    }

    return ParseJsonBody(r, v)
}

先执行了ParseForm,如果只是传json,就会报错。能否先使用strings.Contains(r.Header.Get(ContentType), ApplicationJson)之类代码判断提交的是json还是form,再进行处理。

回答

1

tag不一样的,根据tag来解析的,先后不重要呀

5

会先执行ParseForm,然后return err ,不会执行ParseJsonBody

8

ParseForm有error才会返回,有error了就不该继续了的