Заголовок Gorilla mux json для всех маршрутов golang

Есть ли способ установить заголовок 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"})

Для этого вы можете написать свою собственную промежуточную функцию: функцию, которая принимает func(http.ResponseWriter, *http.Request) и возвращает другое значение того же типа функции. Затем примените обертку интересующих обработчиков в этом промежуточном программном обеспечении.

jub0bs 05.05.2022 17:53
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
1
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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)

Другие вопросы по теме