|
|
@ -4,6 +4,7 @@ import ( |
|
|
|
"bytes" |
|
|
|
"bytes" |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
"git.diulo.com/mogfee/kit/encoding" |
|
|
|
"git.diulo.com/mogfee/kit/encoding" |
|
|
|
|
|
|
|
"git.diulo.com/mogfee/kit/errors" |
|
|
|
"git.diulo.com/mogfee/kit/internal/httputil" |
|
|
|
"git.diulo.com/mogfee/kit/internal/httputil" |
|
|
|
"git.diulo.com/mogfee/kit/transport/http/binding" |
|
|
|
"git.diulo.com/mogfee/kit/transport/http/binding" |
|
|
|
"github.com/gorilla/mux" |
|
|
|
"github.com/gorilla/mux" |
|
|
@ -38,18 +39,18 @@ func DefaultRequestQuery(r *http.Request, v any) error { |
|
|
|
func DefaultRequestDecoder(r *http.Request, v any) error { |
|
|
|
func DefaultRequestDecoder(r *http.Request, v any) error { |
|
|
|
codec, ok := CodeForRequest(r, "Content-Type") |
|
|
|
codec, ok := CodeForRequest(r, "Content-Type") |
|
|
|
if !ok { |
|
|
|
if !ok { |
|
|
|
return errorx.BadRequest("CODEC", fmt.Sprintf("unregister Content-Type: %s", codec)) |
|
|
|
return errors.BadRequest("CODEC", fmt.Sprintf("unregister Content-Type: %s", codec)) |
|
|
|
} |
|
|
|
} |
|
|
|
data, err := io.ReadAll(r.Body) |
|
|
|
data, err := io.ReadAll(r.Body) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
return errorx.BadRequest("CODEC", err.Error()) |
|
|
|
return errors.BadRequest("CODEC", err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
r.Body = io.NopCloser(bytes.NewBuffer(data)) |
|
|
|
r.Body = io.NopCloser(bytes.NewBuffer(data)) |
|
|
|
if len(data) == 0 { |
|
|
|
if len(data) == 0 { |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
if err = codec.Unmarshal(data, v); err != nil { |
|
|
|
if err = codec.Unmarshal(data, v); err != nil { |
|
|
|
return errorx.BadRequest("CODEC", err.Error()) |
|
|
|
return errors.BadRequest("CODEC", err.Error()) |
|
|
|
} |
|
|
|
} |
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
@ -72,7 +73,7 @@ func DefaultResponseEncoder(w http.ResponseWriter, r *http.Request, v any) error |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
func DefaultErrorEncoder(w http.ResponseWriter, r *http.Request, err error) { |
|
|
|
func DefaultErrorEncoder(w http.ResponseWriter, r *http.Request, err error) { |
|
|
|
se := errorx.FromError(err) |
|
|
|
se := errors.FromError(err) |
|
|
|
codec, _ := CodeForRequest(r, "Accept") |
|
|
|
codec, _ := CodeForRequest(r, "Accept") |
|
|
|
body, err := codec.Marshal(se) |
|
|
|
body, err := codec.Marshal(se) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|