Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion echo.go
Original file line number Diff line number Diff line change
Expand Up @@ -438,12 +438,16 @@ func (e *Echo) DefaultHTTPErrorHandler(err error, c Context) {
// Issue #1426
code := he.Code
message := he.Message
if m, ok := he.Message.(string); ok {

switch m := he.Message.(type) {
case string:
if e.Debug {
message = Map{"message": m, "error": err.Error()}
} else {
message = Map{"message": m}
}
case error:
message = Map{"message": m.Error()}
}

// Send response
Expand Down
8 changes: 8 additions & 0 deletions echo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1313,6 +1313,9 @@ func TestDefaultHTTPErrorHandler(t *testing.T) {
err := errors.New("internal error message body")
return NewHTTPError(http.StatusBadRequest).SetInternal(err)
})
e.GET("/error-in-httperror", func(c Context) error {
return NewHTTPError(http.StatusBadRequest, errors.New("error in httperror"))
})

// With Debug=true plain response contains error message
c, b := request(http.MethodGet, "/plain", e)
Expand Down Expand Up @@ -1347,6 +1350,11 @@ func TestDefaultHTTPErrorHandler(t *testing.T) {
c, b = request(http.MethodGet, "/servererror", e)
assert.Equal(t, http.StatusInternalServerError, c)
assert.Equal(t, "{\"code\":33,\"error\":\"stackinfo\",\"message\":\"Something bad happened\"}\n", b)

// when returning HTTPError with error, the error message is returned
c, b = request(http.MethodGet, "/error-in-httperror", e)
assert.Equal(t, http.StatusBadRequest, c)
assert.Equal(t, "{\"message\":\"error in httperror\"}\n", b)
}

func TestEchoClose(t *testing.T) {
Expand Down