Skip to content

Commit 16fcd56

Browse files
committed
Enhanced JSON error reporting in binder
1 parent 8fc833b commit 16fcd56

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

binder.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,13 @@ func (b *binder) Bind(i interface{}, c Context) (err error) {
3636
switch {
3737
case strings.HasPrefix(ctype, MIMEApplicationJSON):
3838
if err = json.NewDecoder(req.Body()).Decode(i); err != nil {
39-
err = NewHTTPError(http.StatusBadRequest, err.Error())
39+
if ute, ok := err.(*json.UnmarshalTypeError); ok {
40+
err = NewHTTPError(http.StatusBadRequest, fmt.Sprintf("type mismatch: expected %v got %v at offset %v", ute.Type, ute.Value, ute.Offset))
41+
} else if se, ok := err.(*json.SyntaxError); ok {
42+
err = NewHTTPError(http.StatusBadRequest, fmt.Sprintf("syntax error at byte %v: %v", se.Offset, se.Error()))
43+
} else {
44+
err = NewHTTPError(http.StatusBadRequest, err.Error())
45+
}
4046
}
4147
case strings.HasPrefix(ctype, MIMEApplicationXML):
4248
if err = xml.NewDecoder(req.Body()).Decode(i); err != nil {

0 commit comments

Comments
 (0)