iris-v12 框架搭建三 接收与返回方式大全

iris-v12 框架搭建三 接收与返回方式大全

    • URL上的传值
    • 表单传值multipart/form-data
      • 有文件
      • 无文件
    • 表单传值application/x-www-form-urlencoded
    • 自定义结构
      • json
      • xml
    • 通过方法参数接受

iris虽然号称宇宙最快且支持mvc结构,不过用的人好像没有gin多呀。这里我默认你已经会了mvc的搭建方式(不懂可以看框架搭建二),因此只贴controller的代码。
先贴一个处理错误的私有方法⬇,等等看到d.checkErr(err)就是调用了这个

type DataController struct {
	Ctx iris.Context
}

func (d *DataController) checkErr(err error) {
	if err != nil {
		d.Ctx.JSON(iris.Map{
			"success": false,
			"data":    nil,
		})
		panic(err)
	}
}

URL上的传值

在GET请求中想要传参最常见的就是url上加参数的方式了
iris上接收GET请求并获取url传参⬇

//url:http://localhost:8080/data/query
//method:GET
//接收GET请求url上的param
//返回json
func (d *DataController) GetQuery() {
	//第一种,可以选择直接获取全部,但是要注意这边会将其全部转换为string类型
	//除非你全部都是string,不然还是要自己一个个取出来转值
	urlParams := d.Ctx.URLParams()
	//返回json类型的数据
	d.Ctx.JSON(iris.Map{
		"success": true,
		"data":    urlParams,
	})
	//第二种,一个个分别取值,类型自己掌控
	anime := d.Ctx.URLParam("anime")
	number, err := d.Ctx.URLParamInt("number")
	d.checkErr(err)
	d.Ctx.JSON(iris.Map{
		"success": true,
		"data":    iris.Map{"anime": anime, "number": number},
	})
}

前端路由正确时
iris-v12 框架搭建三 接收与返回方式大全_第1张图片
错误时:
iris-v12 框架搭建三 接收与返回方式大全_第2张图片

表单传值multipart/form-data

请求中Headers里的Content-Type:multipart/form-data

有文件

iris上接收POST请求并获取multipart/form-data类型参数⬇

//url:http://localhost:8080/data/form
//method:POST
//接收POST请求,获取Content-Type为multipart/form-data的内容内有文件
//返回json
func (d *DataController) PostForm() {
	//获取文件,文件头,可能的错误
	imageFile, imageFileHeader, err := d.Ctx.FormFile("head-img")
	d.checkErr(err)

	annotation := d.Ctx.FormValue("annotation")
	imageBytes := make([]byte, 1)
	_, err = imageFile.Read(imageBytes)
	d.checkErr(err)
	//将文件写入./views/image/内,同名会覆盖,这里仅做演示,对于文件读写的详细操作可以看我的文章。
	ioutil.WriteFile("./views/image/"+imageFileHeader.Filename, imageBytes, 0777)
	d.Ctx.JSON(iris.Map{
		"success": true,
		"data": iris.Map{
			"imageBytes":  imageBytes,
			"imageHeader": imageFileHeader,
			"annotation":  annotation,
		},
	})
}

在Postman上测试url:http://localhost:8080/data/form
iris-v12 框架搭建三 接收与返回方式大全_第3张图片
后端
iris-v12 框架搭建三 接收与返回方式大全_第4张图片
可以看的出来文件处理的很完美,依旧是那么的高清可爱!!

无文件

iris上接收POST请求并获取multipart/form-data类型参数。

需要注意的是Ctx.FormValues()这个参数也能够获取url上的参数,因此如果你只想要单单获取url的参数需要使用URLParams()。

//url:http://localhost:8080/data/form2
//method:POST
//接收POST请求,获取Content-Type为multipart/form-data的内容,无文件
//返回json
func (d *DataController) PostForm2() {
	//和URLParams()类似,都是将其中的内容全部转换为string
	//如果里面有不能转换的内容比如文件,将会把这个参数忽略掉
	formMap := d.Ctx.FormValues()

	isBest, err := strconv.ParseBool(formMap["isBest"][0])
	d.checkErr(err)
	number := make([]int64, len(formMap["number"]))
	for i, value := range formMap["number"] {
		number[i], err = strconv.ParseInt(value, 10, 32)
		d.checkErr(err)
	}
	d.Ctx.JSON(iris.Map{
		"success": true,
		"data": iris.Map{
			"number":     number,
			"isBest":     isBest,
			"annotation": formMap["annotation"][0],
		},
	})
}

前端接收值转换成功⬇
iris-v12 框架搭建三 接收与返回方式大全_第5张图片

表单传值application/x-www-form-urlencoded

请求中Headers里的Content-Type:application/x-www-form-urlencoded,其内容用**&**分隔和url上传参差不多,都不能传文件,只不过一个把内容放在请求的url上,一个放进请求的body里。在这边后端的接收方式和上面的一样都是使用FormValue()/FormValues()方法。

//url:http://localhost:8080/data/form3
//method:POST
//接收POST请求,获取Content-Type为application/x-www-form-urlencoded的内容
//返回json
func (d *DataController) PostForm3() {
	//和URLParams()类似,都是将其中的内容全部转换为string
	//如果里面有不能转换的内容比如文件,将会把这个参数忽略掉
	formMap := d.Ctx.FormValues()
	isBest, err := strconv.ParseBool(formMap["isBest"][0])
	d.checkErr(err)
	number := make([]int64, len(formMap["number"]))
	for i, value := range formMap["number"] {
		number[i], err = strconv.ParseInt(value, 10, 32)
		d.checkErr(err)
	}
	d.Ctx.JSON(iris.Map{
		"success": true,
		"data": iris.Map{
			"number":     number,
			"isBest":     isBest,
			"anime":  d.Ctx.FormValue("anime"),
		},
	})
}

可以看的出来FormValues()是可以接收url上的参数的⬇(注意url)
iris-v12 框架搭建三 接收与返回方式大全_第6张图片

自定义结构

主要有xml,json,并且接收什么类型我也会相应的返回对应类型。

json

先来手最常用的json,正常来讲就是自定义结构体来接收了,不过如果结构体内值类型都相同,也可以使用map[type]type来接收。

//url:http://localhost:8080/data/raw/json
//method:POST
//接收POST请求,获取Content-Type为application/json的内容
//返回json
func (d *DataController) PostRawJson() {
	type anime struct {
		Name   string
		Number int
		IsBest bool
	}
	animeStruct := new(anime)
	//如果全都是一个类型也可以不适用结构体改为map[type]type代替更为方便
	err := d.Ctx.ReadJSON(animeStruct)
	d.checkErr(err)
	d.Ctx.JSON(iris.Map{
		"success": true,
		"data":    animeStruct,
	})
}

使用postman测试url:http://localhost:8080/data/raw/json
iris-v12 框架搭建三 接收与返回方式大全_第7张图片

xml

xml的实现感觉有点麻烦,我也不知道有没有更简单的方式,不过这边实现虽然麻烦不过该有的什么标签属性,多级标签我也都是很完美的接收到了。

//url:http://localhost:8080/data/raw/xml
//method:POST
//接收POST请求,获取Content-Type为application/xml的内容
//返回xml
func (d *DataController) PostRawXml() {
	//因为底下父结构体有为其设置xml因此就不需要设置xml.Name
	type Note struct {
		//XMLName xml.Name `xml:"note"`
		Type    string `xml:"type,attr"` //attr属性。
		To      string `xml:"to"`
		From    string `xml:"from"`
		Heading string `xml:"heading"`
		Body    string `xml:"body"`
	}
	type EmailXml struct {
		//设置根元素名
		XMLName xml.Name `xml:"content"`
		Note    Note    `xml:"note"`
		Version string   `xml:"version"`
	}
	bangEmail := new(EmailXml)
	//读取xml
	d.Ctx.ReadXML(bangEmail)
	//返回xml
	d.Ctx.XML(bangEmail)
}

使用postman测试url:http://localhost:8080/data/raw/xml
iris-v12 框架搭建三 接收与返回方式大全_第8张图片

通过方法参数接受

先来说一下基本规则。

  1. 方法名第一个单词必须为url的Method如:Get/Post/Put/Patch/Options等,比较多我就不列举了。
  2. 第一个单词后为你的路径名,以大写字母为路径分隔如:PostUserName()的路径为/user/name
  3. By这个单词不为路径名,代表了限定的路径值例如:DeleteUserBy(id uint64)的路径为/user/正整数其中user后的那个路径必须为正整数比如1,23什么的如果是个a,bc这种会找不到路径。

说再多不如举几个例子⬇

//method:Post
//url:http://localhost:8080/data/name/xxx string
//返回html
func (d *DataController) PostNameBy(name string) {
	d.Ctx.HTML("

" + name + "是最好看的动漫!

"
) } //method:Put //url:http://localhost:8080/data/name/xxx string/id/xxx uint64 //返回text func (d *DataController) PutNameByIdBy(name string, id uint64) { d.Ctx.WriteString(name + "修改为第" + string(id) + "好看的动漫") } //method:Delete //url:http://localhost:8080/data/name/xxx int64 //返回text func (d *DataController) DeleteNameBy(id int64) { d.Ctx.Writef("删除id为%d的用户", id) }

使用Postman测试Post:http://localhost:8080/data/name/街角魔族
iris-v12 框架搭建三 接收与返回方式大全_第9张图片
使用Postman测试Put:http://localhost:8080/data/name/街角魔族/id/1
iris-v12 框架搭建三 接收与返回方式大全_第10张图片
使用Postman测试Put:http://localhost:8080/data/name/街角魔族/id/-1,状态码404找不到资源,-1无法转换为uint64。
iris-v12 框架搭建三 接收与返回方式大全_第11张图片
使用Postman测试Delete:http://localhost:8080/data/name/-1
iris-v12 框架搭建三 接收与返回方式大全_第12张图片
以上结束。

你可能感兴趣的:(iris,http,golang)