(w http.ResponseWriter, r *http.Request)
| 409 | } |
| 410 | |
| 411 | func (fn appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { |
| 412 | if e := fn(w, r); e != nil { // e is *appError |
| 413 | if e.Code/100 == 5 { |
| 414 | log.Println(e.Error) |
| 415 | } |
| 416 | // When Content-Type for error is JSON, we need to marshal the response into JSON |
| 417 | if e.IsJSON() { |
| 418 | var data = struct { |
| 419 | Code int `json:"status"` |
| 420 | Error string `json:"error"` |
| 421 | }{e.Code, e.Message} |
| 422 | b, err := json.MarshalIndent(data, "", " ") |
| 423 | if err != nil { |
| 424 | panic(err) |
| 425 | } |
| 426 | e.Message = string(b) |
| 427 | } |
| 428 | // Set Content-Type of response if set in error |
| 429 | if e.ContentType != "" { |
| 430 | w.Header().Set("Content-Type", e.ContentType) |
| 431 | } |
| 432 | w.WriteHeader(e.Code) |
| 433 | fmt.Fprint(w, e.Message) |
| 434 | } |
| 435 | } |
| 436 | |
| 437 | func (s *Server) Handler() http.Handler { |
| 438 | r := NewRouter() |
no test coverage detected