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")
    }
    
  • 相关阅读:
    地址SQL文件
    SpringBoot webjars 映射
    Maven 阿里镜像
    Log4j输出的日志乱码问题
    Redis Client 官方下载地址
    SpringBoot连接Oracle报错,找不到驱动类,application.properties文件中驱动类路径为红色
    Linux Ubuntu 默认root密码
    Java 格式化字符串
    Linux Ubuntu 常见的压缩命令
    使用MD5比较两个文件是否相同
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14318173.html
Copyright © 2011-2022 走看看