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},})
}

前端路由正确时

错误时:

表单传值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上接收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],},})
}

前端接收值转换成功⬇

表单传值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)

自定义结构

主要有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   stringNumber intIsBest 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

xml

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

//url:http://localhost:8080/data/raw/xml
//method:POST
//接收POST请求,获取Content-Type为application/xml的内容
//返回xml
func (d *DataController) PostRawXml() {//因为底下父结构体有为其设置xml因此就不需要设置xml.Nametype 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)//读取xmld.Ctx.ReadXML(bangEmail)//返回xmld.Ctx.XML(bangEmail)
}

使用postman测试url:http://localhost:8080/data/raw/xml

通过方法参数接受

先来说一下基本规则。

  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("<h1>" + name + "是最好看的动漫!</h1>")
}//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/街角魔族

使用Postman测试Put:http://localhost:8080/data/name/街角魔族/id/1

使用Postman测试Put:http://localhost:8080/data/name/街角魔族/id/-1,状态码404找不到资源,-1无法转换为uint64。

使用Postman测试Delete:http://localhost:8080/data/name/-1

以上结束。

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

  1. 应用服务器与WSGI协议以及flask后端框架总结(后端接收请求返回响应的整个流程)...

    上次遗留了两个问题,先说一下自己的看法 问题: 1.明明一个线程只能处理一个请求,那么栈里的元素永远是在栈顶,那为什么需要用栈这个结构?用普通变量不行吗. 2._request_ctx_stack和_ ...

  2. golang后台管理系统Iris+Layui框架搭建教程

    项目介绍 一款 Go 语言基于Iris.Layui.MySQL等框架精心打造的一款模块化.高性能.企业级的敏捷开发框架,本着简化开发.提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的 ...

  3. 自动化测试框架搭建三python环境安装selenium和手动下载安装selenium的方法

    python环境安装selenium和手动下载安装selenium的方法 方法1:cmd环境下,用pip install selenium 可能会很慢 方法2:下载selenium安装包手动安装 下载 ...

  4. SSM框架搭建(三)--整合p6spy

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 描述 普通情况下,控制台打印出的sql是带?的,开发人员在自己调试的过程中遇到bug是再常见不过 ...

  5. C#项目实战WebApi框架搭建以及部署WebApi服务器的几种方式

    1. Api接口的定义: API应用程序编程接口是一些预先定义的接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. 操作系统想了一个 ...

  6. (一)框架搭建,前端路由设置,自定义寻找指定路径(Django+Vue+Mysql,数据库管理数据分析网站)

    从零开始,1周内搭建出内含复杂深度学习作图分析功能的网站,很肝,但是很有收获,问了很多大佬,查了很多资料,碰了很多壁,写了很多代码,测试,学习,趁着刚做完,写文章总结复盘一下,我尽量以我喜欢的通俗的逻 ...

  7. android 换肤框架搭建及使用 (3 完结篇)

    本系列计划3篇: Android 换肤之资源(Resources)加载(一) setContentView() / LayoutInflater源码分析(二) 换肤框架搭建(三) - 本篇 tips: ...

  8. Android MVVM框架搭建(三)MMKV + Room + RxJava2

    Android MVVM框架搭建(三)MMKV + Room + RxJava2 前言 正文 一.添加依赖 二.MMKV 1. 初始化 2. 数据存取 3. 使用 三.Room 1. @Entity ...

  9. webapi框架搭建-创建项目(三)-webapi owin

    webapi框架搭建系列博客 上一篇:创建项目(二) 在上一篇里,我们已经创建好了webapi应用,并已经部署到iis里,本篇讲如何用owin自宿主或是iis宿主来部署webapi应用. owin介绍 ...

最新文章

  1. 设为首页及收藏本页代码 兼容IE和Firefox
  2. winform窗体 小项目【安装程序】
  3. OpenStack核心组件-glance镜像服务
  4. linux-三个文件-用户文件-组文件-密码文件
  5. ArcGIS Maritime Server 开发教程(二)ArcGIS 海图软件系列
  6. Windows10的电脑如何查找AppData文件夹
  7. oracle发生20001,Oracle IMP数据时报20001错误
  8. Python教你用三行代码批量添加水印
  9. Photoshop CC 2019入门知识手册
  10. 从星图地球数据云看塔克拉玛干沙漠
  11. go语言初学者常见错误
  12. 我用维权失败经历告诉你,在淘宝上买到假货只能忍气吞声
  13. 用计算机语言编写花瓣雨,花瓣雨【石家庄计算机学院吧】_百度贴吧
  14. 武大的计算机博士,史上最牛武汉大学之博士招生黑幕
  15. web服务器的相关配置
  16. 读书笔记《SpringBoot编程思想》
  17. java 判断能否整除_java编程,键盘输入一个整数,判断能否被5和6整除,再判断能否被5或6整除?...
  18. itext 生成 PDF(三) pdf横向输出
  19. 用关键词获取商品SKUapi返回值说明
  20. 未注册老域名扫描软件-免费未注册老域名挖掘

热门文章

  1. linux中recvfrom设置为阻塞,recvfrom为什么一直被阻塞???
  2. win10连接不到win7共享打印机
  3. 通信工程专业毕设选题方向【题目推荐】
  4. ES(Elasticsearch)入门学习教程
  5. textarea 显示纯文本_显示textarea内容
  6. 弘辽科技:直通车扣费很高是因为什么?
  7. 数码照片管理系统Damselfly
  8. 用Python自动化生成胡歌爱豆日历
  9. Unity3D 入门小技巧——鼠标拾取并移动物体
  10. java8 list map 排序_java8如何对list中的map元素根据多个key值进行排序