Как ответить на пост запрос пост ответом в golang?
Имеется код на golang, http сервер который принимает на вход post json запрос, парсит его, и выполняет определенный код с данными из запроса, вопрос как ответить на этот запрос так же json оветом, после обработки входящего запроса ?
type test_struct2 struct {
Te string //телеграм
Na string //имя устройства
Mi string //минуты
Se string //секунды
}
func ParseGhPost2(rw http.ResponseWriter, request *http.Request) {
decoder := json.NewDecoder(request.Body)
var rtrt test_struct2
err := decoder.Decode(&rtrt)
if err != nil {
panic(err)
}
//здесь обработка данных из запроса,
//далее хотелось бы ответить на входящий запрос json, ответом json
}
func main() {
var log = log.New()
go http.HandleFunc("/", ParseGhPost2)
go http.ListenAndServe("127.0.0.1:10443", nil)
}
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
кидать панику внутри хэндлера - это плохо. ваше приложение завершится.
func JSONError(w http.ResponseWriter, err error, bcode string, code int) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Header().Set("X-Content-Type-Options", "nosniff")
w.WriteHeader(code)
json.NewEncoder(w).Encode(struct{
Code string
Message string
}{
Code: bcode,
Message: err.Error(),
})
}
func ParseGhPost2(rw http.ResponseWriter, request *http.Request) {
decoder := json.NewDecoder(request.Body)
var rtrt test_struct2
err := decoder.Decode(&rtrt)
if err != nil {
JSONError(rw, fmt.Errorf("cannot unmarshal test_struct2: %w", err), "custom_code", http.StatusUnprocessableEntity)
return // завершаем выполнение
}
response := struct {
Answer string
}{
"response answer",
}
err = json.NewEncoder(rw).Encode(&response)
if err != nil {
// тут уже вам решать, что сделать надо
JSONError(rw, fmt.Errorf("cannot unmarshal response: %w", err), "custom_code2", http.StatusInternalServerError)
return
}
// запишем новый статус в ответ.
rw.WriteHeader(http.StatusCreated)
// а если дошли сюда - это значит, что все хорошо. завершаем
}