Skip to content
On this page

Response

Send String

Context#String(code int, s string) can be used to send plain text response with status code.

Example

go
func(c core.IHTTPContext) error {
  return c.String(http.StatusOK, "Hello, World!")
}

Send HTML (Reference to templates)

Context#HTML(code int, html string) can be used to send simple HTML response with status code. If you are looking to send dynamically generate HTML see templates.

Example

go
func(c core.IHTTPContext) error {
  return c.HTML(http.StatusOK, "<strong>Hello, World!</strong>")
}

Send HTML Blob

Context#HTMLBlob(code int, b []byte) can be used to send HTML blob with status code. You may find it handy using with a template engine which outputs []byte.

Render Template

Learn more

Send JSON

Context#JSON(code int, i interface{}) can be used to encode a provided Go type into JSON and send it as response with status code.

Example

go
// User
type User struct {
  Name  string `json:"name" xml:"name"`
  Email string `json:"email" xml:"email"`
}

// Handler
func(c core.IHTTPContext) error {
  u := &User{
    Name:  "Jon",
    Email: "[email protected]",
  }
  return c.JSON(http.StatusOK, u)
}

Stream JSON

Context#JSON() internally uses json.Marshal which may not be efficient to large JSON, in that case you can directly stream JSON.

Example

go
func(c core.IHTTPContext) error {
  u := &User{
    Name:  "Jon",
    Email: "[email protected]",
  }
  c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8)
  c.Response().WriteHeader(http.StatusOK)
  return json.NewEncoder(c.Response()).Encode(u)
}

JSON Pretty

Context#JSONPretty(code int, i interface{}, indent string) can be used to a send a JSON response which is pretty printed based on indent, which could be spaces or tabs.

Example below sends a pretty print JSON indented with spaces:

go
func(c core.IHTTPContext) error {
  u := &User{
    Name:  "Jon",
    Email: "[email protected]",
  }
  return c.JSONPretty(http.StatusOK, u, "  ")
}
js
{
  "email": "[email protected]",
  "name": "Jon"
}

You can also use Context#JSON() to output a pretty printed JSON (indented with spaces) by appending pretty in the request URL query string.

Example

sh
curl http://localhost:3000/users/1?pretty

JSON Blob

Context#JSONBlob(code int, b []byte) can be used to send pre-encoded JSON blob directly from external source, for example, database.

Example

go
func(c core.IHTTPContext) error {
  encodedJSON := []byte{} // Encoded JSON from external source
  return c.JSONBlob(http.StatusOK, encodedJSON)
}

Send JSONP

Context#JSONP(code int, callback string, i interface{}) can be used to encode a provided Go type into JSON and send it as JSONP payload constructed using a callback, with status code.

Example

Send XML

Context#XML(code int, i interface{}) can be used to encode a provided Go type into XML and send it as response with status code.

Example

go
func(c core.IHTTPContext) error {
  u := &User{
    Name:  "Jon",
    Email: "[email protected]",
  }
  return c.XML(http.StatusOK, u)
}

Stream XML

Context#XML internally uses xml.Marshal which may not be efficient to large XML, in that case you can directly stream XML.

Example

go
func(c core.IHTTPContext) error {
  u := &User{
    Name:  "Jon",
    Email: "[email protected]",
  }
  c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationXMLCharsetUTF8)
  c.Response().WriteHeader(http.StatusOK)
  return xml.NewEncoder(c.Response()).Encode(u)
}

XML Pretty

Context#XMLPretty(code int, i interface{}, indent string) can be used to a send an XML response which is pretty printed based on indent, which could be spaces or tabs.

Example below sends a pretty print XML indented with spaces:

go
func(c core.IHTTPContext) error {
  u := &User{
    Name:  "Jon",
    Email: "[email protected]",
  }
  return c.XMLPretty(http.StatusOK, u, "  ")
}
xml
<?xml version="1.0" encoding="UTF-8"?>
<User>
  <Name>Jon</Name>
  <Email>[email protected]</Email>
</User>

You can also use Context#XML() to output a pretty printed XML (indented with spaces) by appending pretty in the request URL query string.

Example

sh
curl http://localhost:3000/users/1?pretty

XML Blob

Context#XMLBlob(code int, b []byte) can be used to send pre-encoded XML blob directly from external source, for example, database.

Example

go
func(c core.IHTTPContext) error {
  encodedXML := []byte{} // Encoded XML from external source
  return c.XMLBlob(http.StatusOK, encodedXML)
}

Send File

Context#File(file string) can be used to send the content of file as response. It automatically sets the correct content type and handles caching gracefully.

Example

go
func(c core.IHTTPContext) error {
  return c.File("<PATH_TO_YOUR_FILE>")
}

Send Attachment

Context#Attachment(file, name string) is similar to File() except that it is used to send file as attachment with provided name.

Example

go
func(c core.IHTTPContext) error {
  return c.Attachment("<PATH_TO_YOUR_FILE>", "<ATTACHMENT_NAME>")
}

Send Inline

Context#Inline(file, name string) is similar to File() except that it is used to send file as inline with provided name.

Example

go
func(c core.IHTTPContext) error {
  return c.Inline("<PATH_TO_YOUR_FILE>")
}

Send Blob

Context#Blob(code int, contentType string, b []byte) can be used to send an arbitrary data response with provided content type and status code.

Example

go
func(c core.IHTTPContext) (err error) {
  data := []byte(`0306703,0035866,NO_ACTION,06/19/2006
	  0086003,"0005866",UPDATED,06/19/2006`)
	return c.Blob(http.StatusOK, "text/csv", data)
}

Send Stream

Context#Stream(code int, contentType string, r io.Reader) can be used to send an arbitrary data stream response with provided content type, io.Reader and status code.

Example

go
func(c core.IHTTPContext) error {
  f, err := os.Open("<PATH_TO_IMAGE>")
  if err != nil {
    return err
  }
  return c.Stream(http.StatusOK, "image/png", f)
}

Send No Content

Context#NoContent(code int) can be used to send empty body with status code.

Example

go
func(c core.IHTTPContext) error {
  return c.NoContent(http.StatusOK)
}

Redirect Request

Context#Redirect(code int, url string) can be used to redirect the request to a provided URL with status code.

Example

go
func(c core.IHTTPContext) error {
  return c.Redirect(http.StatusMovedPermanently, "<URL>")
}

Hooks

Before Response

Context#Response#Before(func()) can be used to register a function which is called just before the response is written.

After Response

Context#Response#After(func()) can be used to register a function which is called just after the response is written. If the "Content-Length" is unknown, none of the after function is executed.

Example

go
func(c core.IHTTPContext) error {
  c.Response().Before(func() {
    println("before response")
  })
  c.Response().After(func() {
    println("after response")
  })
  return c.NoContent(http.StatusNoContent)
}

It is possible to register multiple before and after functions

Maintained by Passakon Puttasuwan & Dev Core Team.