一、golang代码:
package main
import (
"encoding/json"
"log"
"net/http"
"time"
)
//主函数中,启动一个http server 服务
func main() {
http.HandleFunc("/", respM1)
http.HandleFunc("/m2", respM2)
s := &http.Server{
Addr: ":8080",
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
err := s.ListenAndServe()
if err != nil {
log.Fatal("listenAndServe: ", err)
}
}
//定义一个结构体,存放请求参数
type ReqData struct{
Opttype int `json:"opttype"`
Data struct{
Name string `json:"name"`
Account []string `json:"account"`
} `json:"data"`
}
//方法1
func respM1(w http.ResponseWriter, r *http.Request) {
var reqdata ReqData
// 调用json包的解析,解析请求body
if err:=json.NewDecoder(r.Body).Decode(&reqdata); err!=nil{
r.Body.Close()
log.Fatal(err)
}
jsonData, _ := json.Marshal(reqdata)
log.Println("req json: ", string(jsonData))
// 返回json字符串给客户端
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(reqdata)
}
//方法2
func respM2(w http.ResponseWriter, r *http.Request) {
//获取post json请求转换为map
err := r.ParseForm()
if err != nil {
log.Fatal("parse form error ", err)
}
// 初始化请求变量结构,使用map类型
formData := make(map[string]interface{})
// 调用json包的解析,解析请求body
json.NewDecoder(r.Body).Decode(&formData)
//log.Println("req form: ", formData)
for key, value := range formData {
log.Println("key:", key, " => value :", value)
}
// 返回json字符串给客户端
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(formData)
}
二、客户端请求(命令行下)
curl -H "Content-Type:application/json" -X POST -d '{"opttype":1 ,"data": { "Name": "userinfo", "account": ["user001", "user002", "user003"]} }' -i 'http://127.0.0.1:8080/m2'