From ce26e8bf6363f36c5ddd037aa075291c45431bac Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Fri, 19 May 2023 23:02:42 +0300 Subject: [PATCH] move down path handler after specific handler Signed-off-by: Vasiliy Tolstov --- handler.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/handler.go b/handler.go index 60dc74f..3018979 100644 --- a/handler.go +++ b/handler.go @@ -334,12 +334,6 @@ func (h *Server) HTTPHandlerFunc(handler interface{}) (http.HandlerFunc, error) } func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - // check for http.HandlerFunc handlers - if ph, _, err := h.pathHandlers.Search(r.Method, r.URL.Path); err == nil { - ph.(http.HandlerFunc)(w, r) - return - } - ct := DefaultContentType if htype := r.Header.Get(metadata.HeaderContentType); htype != "" { ct = htype @@ -364,10 +358,6 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { md["RequestURI"] = r.RequestURI ctx = metadata.NewIncomingContext(ctx, md) - if r.Body != nil { - defer r.Body.Close() - } - path := r.URL.Path if !strings.HasPrefix(path, "/") { h.errorHandler(ctx, nil, w, r, fmt.Errorf("path must starts with /"), http.StatusBadRequest) @@ -424,6 +414,11 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } } else if !match { + // check for http.HandlerFunc handlers + if ph, _, err := h.pathHandlers.Search(r.Method, r.URL.Path); err == nil { + ph.(http.HandlerFunc)(w, r) + return + } h.errorHandler(ctx, nil, w, r, fmt.Errorf("not matching route found"), http.StatusNotFound) return } @@ -440,6 +435,10 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } + if r.Body != nil { + defer r.Body.Close() + } + cf, err := h.newCodec(ct) if err != nil { h.errorHandler(ctx, nil, w, r, err, http.StatusBadRequest)