핸들러 함수로 전달된 컨텍스트를 통해 클라이언트에게 HTTP 응답을 할 수 있습니다.
func (c *gin.Context) {
// 요청 처리
// 응답 처리
}
응답 하기
http
응답하는 함수 입니다. 핸들러 함수 인자인 c *gin.Context
를 사용 합니다.
// JSON
c.JSON()
// 보기좋은 JSON
c.IndentedJSON()
// JSON 하이제킹 방지 처리
c.SecureJSON()
// JSONP 응답 처리
c.JSONP()
// 특수 html 문자를 유니코드로 대체하지 않음.
c.PureJSON()
// ASCII only JSON
AsciiJSON()
// XML
c.XML()
// String 문자열 응답 Printf 처럼 사용
c.String()
// Redirect 응답
c.Redirect()
// []byte 응답
c.Data()
// Html 템플릿 렌더링 응답
c.HTML()
// YAML 응답
c.YAML()
// ProtoBuf 응답
c.ProtoBuf()
위 함수는 첫번째 인자로 HTTP 응답 코드를 넣어주어야 합니다.
응답 코드
net/http
패키지에 응답 코드가 정의되어 있습니다.
const (
StatusContinue = 100 // RFC 7231, 6.2.1
StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2
StatusProcessing = 102 // RFC 2518, 10.1
StatusEarlyHints = 103 // RFC 8297
StatusOK = 200 // RFC 7231, 6.3.1
StatusCreated = 201 // RFC 7231, 6.3.2
StatusAccepted = 202 // RFC 7231, 6.3.3
StatusNonAuthoritativeInfo = 203 // RFC 7231, 6.3.4
StatusNoContent = 204 // RFC 7231, 6.3.5
StatusResetContent = 205 // RFC 7231, 6.3.6
...
//
200 == http.StatusOK
JSON 응답
JSON
기본적인 JSON 응답 입니다.
// Map 사용
c.JSON(http.StatusOK, gin.H{
"message": "ok",
})
// 구조체 사용
var msg struct {
Name string `json:"user"`
Message string
Number int
}
msg.Name = "error"
msg.Name = "bad request"
msg.Number = 0
c.JSON(http.StatusBadRequest, msg)
// in gin package
// H is a shortcut for map[string]interface{}
type H map[string]interface{}
gin.H
를 사용하면 Map을 쉽게 사용할 수 있습니다.
IndentedJSON
JSON 파일을 들여쓰기, 줄 넘김 처리해서 응답합니다. JSON()
과 동일하게 사용 합니다.
SecureJSON
JSON 문자열 앞에 while(1);
을 붙여줍니다. JSON 하이제킹을 방지합니다. JSON()
과 동일하게 사용 합니다.
JSONP
외부 출처에서 데이터를 받아오는 것의 응답을 처리할 때 사용합니다.
r.GET("/JSONP?callback=x", func(c *gin.Context) {
data := map[string]interface{}{
"foo": "bar",
}
//callback is x
// Will output : x({\"foo\":\"bar\"})
c.JSONP(http.StatusOK, data)
})
PureJSON
JSON()
은 <
를 \u003c
처럼 특수 HTML 문자를 유니코드로 치완합니다. PureJSON
은 이러한 작업 없이 JSON을 응답 합니다. JSON()
과 동일하게 사용 합니다.
AsciiJSON
아스키 문자로만 이루어진 JSON을 응답 합니다.JSON()
과 동일하게 사용 합니다.
XML
JSON()
과 같으나, XML 형식으로 응답 합니다. JSON()
과 동일하게 사용 합니다.
String
c.String(http.StatusOK, "hello %s", "vompressor")
단순 문자열을 리턴 합니다. Printf
처럼 포맷을 사용할 수 있습니다.
Redirect
c.Redirect(http.StatusMovedPermanently, "https://vompressor.com")
리다이렉트 응답입니다. 30X
응답 코드랑 사용 합니다.
Data
c.Data(http.StatusOK, "text/html", []byte("<html></html"))
[]byte
응답 시 사용합니다. 주로 파일 응답에 사용합니다. 두번째 인자로 Content-Type
을 명시해줍니다.
HTML
YAML
JSON()
과 같으나, YAML형식으로 응답 합니다. JSON()
과 동일하게 사용 합니다.