zoukankan      html  css  js  c++  java
  • Golang ECHO处理请求结果【4】

    处理完http请求后如何响应请求,echo框架支持以字符串、json、xml、文件等格式响应请求。

    echo.Context 上下文对象支持多种返回处理结果,下面分别介绍不同的响应方式。

    1.以字符串方式响应请求

    函数定义:
    String(code int, s string) error

    参数说明:

    参数 说明
    code http状态码
    s 返回结果

    例子:

    func(c echo.Context) error {
      //http.StatusOK == 200
      return c.String(http.StatusOK, "hello echo")
      //也可以直接设置http状态码
      //return c.String(200, "hello echo")
    }
    

    提示: net/http包定义了多种常用的状态码常量,例如:http.StatusOK == 200, http.StatusMovedPermanently == 301, http.StatusNotFound == 404等,具体可以参考net/http包

    2.以json格式响应请求

    函数定义:
    JSON(code int, i interface{}) error

    参数说明:

    参数 说明
    code http状态码
    i 返回结果对象,通常传入struct对象

    例子:

    // User 定义
    type User struct {
      Name  string `json:"name"` // 通过json标签定义struct字段转换成json字段的名字。
      Email string `json:"email"`
    }
    
    // Handler 控制器
    func(c echo.Context) error {
      //初始化user对象
      u := &User{
        Name:  "xjs",
        Email: "xxxx@163.com",
      }
      //返回json数据
      //返回结果:{"name":"xjs", "email":"xxxx@163.com"}
      return c.JSON(200, u)
    }
    

    3.以xml格式响应请求

    函数定义:
    XML(code int, i interface{}) error

    参数说明:

    参数 说明
    code http状态码
    i 返回结果对象,通常传入struct对象

    例子:

    // User 定义, 默认struct的名字就是xml的根节点名字,这里转换成xml后根节点的名字为User.
    type User struct {
      Name  string `xml:"name"` // 通过xml标签定义struct字段转换成xml字段的名字。
      Email string `xml:"email"`
    }
    
    // Handler 控制器
    func(c echo.Context) error {
      //初始化user对象
      u := &User{
        Name:  "xjs",
        Email: "xxxx@163.com",
      }
      //返回json数据
      //返回结果:
      //  <?xml version="1.0" encoding="UTF-8"?>
      //  <User><name>xjs</name><email>xxxx@163.com</email></User>
      return c.XML(200, u)
    }
    

    4.以文件格式响应请求

    如果需要实现文件下载功能,可以直接返回文件。
    echo支持多种方式返回文件:

    例子1:
    func(c echo.Context) error {
      //通过File函数,直接返回本地文件,参数为本地文件地址。
      //函数说明:c.File("文件路径")
      return c.File("/var/www/1.jpg")
    }
    
    例子2:
    func(c echo.Context) error {
      //通过Attachment函数,返回本地文件,类似File函数,区别是可以指定下载的文件名。
      //函数说明: c.Attachment("文件路径", "下载的文件名")
      return c.Attachment("/var/www/1.jpg", "1.jpg")
    }
    
    例子3:
    func(c echo.Context) (err error) {
        data := []byte(`0306703,0035866,NO_ACTION,06/19/2006
    	  0086003,"0005866",UPDATED,06/19/2006`)
    	//通过Blob函数,以二进制数据格式返回文件
    	//函数说明:c.Blob(状态码, "contentType", byte数组)
        return c.Blob(http.StatusOK, "text/csv", data)
    }
    
    例子4:
    func(c echo.Context) error {
      //打开文件
      f, err := os.Open("/var/www/1.jpg")
      if err != nil {
        return err
      }
      //通过Stream函数,以stream流的方式返回文件
      //函数说明:
      //Stream(code int, contentType string, r io.Reader) error
      //参数说明:
      //  code - 状态码
      //  contentType - html内容类型
      //  r   - 实现io.Reader接口的struct对象都可以直接输出内容
      return c.Stream(http.StatusOK, "image/png", f)
    }
    

    5.设置http响应头(设置Header)

    func(c echo.Context) error {
      //设置http响应 header
      c.Response().Header().Add("name", "xjs")
      
      return c.String(200, "my blogs")
    }
    
  • 相关阅读:
    61. 最长不含重复字符的子字符串
    60. 礼物的最大价值 (未理解)
    59. 把数字翻译成字符串
    58. 把数组排成最小的数
    57. 数字序列中某一位的数字 (不懂)
    spring data jpa 官方文档
    idea 编译报错 源发行版 1.8 需要目标发行版 1.8
    idea maven 依赖报错 invalid classes root
    solr
    spring boot 官方文档
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14318173.html
Copyright © 2011-2022 走看看