I want to seperate concerns between usecases and transport it, so I tried nethttp.RequestMapping() as shown on README.md.
But I found it doesn't work for json body, and I started debug the package.
package rest has 6 const ParamIn
const (
// ParamInPath indicates path parameters, such as `/users/{id}`.
ParamInPath = ParamIn("path")
// ParamInQuery indicates query parameters, such as `/users?page=10`.
ParamInQuery = ParamIn("query")
// ParamInBody indicates body value, such as `{"id": 10}`.
ParamInBody = ParamIn("body")
// ParamInFormData indicates body form parameters.
ParamInFormData = ParamIn("formData")
// ParamInCookie indicates cookie parameters, which are passed ParamIn the `Cookie` header,
// such as `Cookie: debug=0; gdpr=2`.
ParamInCookie = ParamIn("cookie")
// ParamInHeader indicates header parameters, such as `X-Header: value`.
ParamInHeader = ParamIn("header")
)
But in RequestMapping
// RequestMapping creates rest.RequestMapping from struct tags.
//
// This can be used to decouple mapping from usecase input with additional struct.
func RequestMapping(v interface{}) func(h *Handler) {
return func(h *Handler) {
m := make(rest.RequestMapping)
for _, in := range []rest.ParamIn{
rest.ParamInFormData,
rest.ParamInQuery,
rest.ParamInHeader,
rest.ParamInPath,
rest.ParamInCookie,
} {
mm := make(map[string]string)
refl.WalkTaggedFields(reflect.ValueOf(v), func(v reflect.Value, sf reflect.StructField, tag string) {
mm[sf.Name] = tag
}, string(in))
if len(mm) > 0 {
m[in] = mm
}
}
if len(m) > 0 {
h.ReqMapping = m
}
}
}
only 5 of them are used without body for json input. I wonder is this intended.
I want to seperate concerns between usecases and transport it, so I tried nethttp.RequestMapping() as shown on README.md.
But I found it doesn't work for json body, and I started debug the package.
package rest has 6 const ParamIn
But in RequestMapping
only 5 of them are used without body for json input. I wonder is this intended.