十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
上一章节介绍了使用echo启动一个http服务器并提供一个简单的GET接口,这一章对请求与响应做一下详细的讲解。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网站空间、营销软件、网站建设、龙亭网站维护、网站推广。
了解请求与响应之前首先要知道ehco框架提供了一个Context接口,Context 表示当前 HTTP 请求的上下文,我们需要知道的是Context的实现结构体context,context中包含了请求(request)、响应(response)以及参数等结构体,context是一个内部结构体,但是对外提供了访问的方法,我们可以在开发中使用context提供的方法做很多事情,比如获取请求路径、客户端ip、请求参数等等。
request是包含了当前请求信息的结构体,我们从中可以获取到前后端约定好的参数来作出相应的业务逻辑,这下面开始模拟请求
首先模拟一个添加用户的POST请求,这里使用了c.bind()这个方法,这个方法起到的作用是把表单参数或者JSON参数绑定至对应的结构体(这里必须是指针类型),字段需要一一对应,也就是说前端需要传递的表单或JSON参数名为name、age、gender才能绑定到结构体中。
接下来模拟一个GET请求用来获取用户信息
response是包含了返回信息的结构体,echo提供了多种类型的返回结果
上面编写了处理请求的handler,这里介绍一下如何把handler注册到路由中,这里对应的就是上面handler。
1.先把要导入的包go build - go install
2.接着在要导入的方法中以: 项目名 / 导入的文件名 的形式导入即可(如下方test(项目名) / chiid(文件名))
http.request的三个属性Form、PostForm、MultipartForm:
Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法。
PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法。
MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法。
获取Get参数
用postman测试,提交,服务端输出 :[111],提交: ;uid=222。服务端输出:[111 222]
小结:r.Form是url.Values字典类型,r.Form[“id”]取到的是一个数组类型。因为http.request在解析参数的时候会将同名的参数都放进同一个数组里。
g.GetHeader("token")
g.Request.Header.Get("token")
h := HeaderParam{}
g.ShouldBindHeader(h) //使用结构体可以解析,map无效
如:测试
g.DefaultQuery("test","")
g.Query("test")
g.Request.URL.Query().Get("test")
//text类型参数
formP,ok := g.GetPostForm("test")
formP := g.DefaultPostForm("test","")
formP :=g.Request.PostForm.Get("test")
//file类型
file,err := r.FormFile("file") //单个
//多个formData解析
formDatas,err := r.MultipartForm()
if err !=nil formDatas !=nil {
files := formDatas.File["files"]
textParams := formDatas.Value["params"]
}
数据解析,同一个参数,只可调用一次,不然会EOF
1、定义结构体解析
uploadInfo :=model.UploadInfo{}
err := c.ShouldBindJSON(uploadInfo)
2、可用map解析出来后再遍历
uploadInfo := make(map[string]interface{})
err := c.ShouldBindJSON(uploadInfo)
用MultipartFile接收表单上传文件数据
案例:全过程
jsp
form action="${pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data"
h2文件上传/h2
文件:input type="file" name="uploadFile"/br/br/
input type="submit" value="上传"/
/form
SpringMVC Controller
@RequestMapping(value = "/upload",method = RequestMethod.POST)
public String upload(@RequestParam(value = "file", required = false) MultipartFile uploadFile, HttpServletRequest request, ModelMap model) {
System.out.println("开始");
String path = request.getSession().getServletContext().getRealPath("upload");
String fileName = file.getOriginalFilename();
String fileName = new Date().getTime()+".jpg";
System.out.println(path);
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
model.addAttribute("fileUrl", request.getContextPath()+"/upload/"+fileName);
return "uploadResult";
}