Есть ли способ установить заголовок json для всех маршрутов?
func Ping(rw http.ResponseWriter, r *http.Request) {
rw.Header().Set("Content-Type", "application/json")
json.NewEncoder(rw).Encode(map[string]string{"Status": "OK"})
}
func Lol(rw http.ResponseWriter, r *http.Request) {
rw.Header().Set("Content-Type", "application/json")
json.NewEncoder(rw).Encode(map[string]string{"Status": "OK"})
}
не дублировать это
json.NewEncoder(rw).Encode(map[string]string{"Status": "OK"})
Вы можете использовать middleware
, чтобы добавить заголовок Content-Type: application/json
к каждому обработчику.
func contentTypeApplicationJsonMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
next.ServeHTTP(w, r)
})
}
Затем зарегистрируйте middleware
в gorilla/mux
, как показано ниже.
r := mux.NewRouter()
r.HandleFunc("/", handler)
r.Use(contentTypeApplicationJsonMiddleware)
Для этого вы можете написать свою собственную промежуточную функцию: функцию, которая принимает
func(http.ResponseWriter, *http.Request)
и возвращает другое значение того же типа функции. Затем примените обертку интересующих обработчиков в этом промежуточном программном обеспечении.