|
|
|
|
@ -102,26 +102,33 @@ func JSONHandler(fn interface{}) http.Handler { |
|
|
|
|
panic("JSONHandler: number of input parameter should be 2 or 3") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var e reflect.Value |
|
|
|
|
switch len(vs) { |
|
|
|
|
case 1: |
|
|
|
|
// todo support other error types
|
|
|
|
|
if vs[0].IsNil() { |
|
|
|
|
if vs[0].IsZero() { |
|
|
|
|
writeResponse(w, http.StatusOK, responseSuccess(nil)) |
|
|
|
|
} else { |
|
|
|
|
err := vs[0].Interface().(error) |
|
|
|
|
writeResponse(w, http.StatusBadRequest, responseError(err.Error())) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
e = vs[0] |
|
|
|
|
case 2: |
|
|
|
|
if vs[1].IsNil() { |
|
|
|
|
if !vs[0].IsNil() { |
|
|
|
|
if vs[1].IsZero() { |
|
|
|
|
if !vs[0].IsZero() { |
|
|
|
|
writeResponse(w, http.StatusOK, responseSuccess(vs[0].Interface())) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
err := vs[1].Interface().(error) |
|
|
|
|
writeResponse(w, http.StatusBadRequest, responseError(err.Error())) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
e = vs[1] |
|
|
|
|
default: |
|
|
|
|
panic("JSONHandler: number of return values should be 1 or 2") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if e.Type().AssignableTo(reflect.TypeOf(HTTPError{})) { |
|
|
|
|
err := e.Interface().(HTTPError) |
|
|
|
|
writeResponse(w, err.Code, responseError(err.Error())) |
|
|
|
|
} else { |
|
|
|
|
err := e.Interface().(error) |
|
|
|
|
writeResponse(w, http.StatusBadRequest, responseError(err.Error())) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|