Gin/Golang의 빈 요청 본문
Gin으로 POST 요청을 처리할 때 요청 본문이 다음과 같이 나타나는 문제가 가끔 발생할 수 있습니다. 비어있어. 이는 특히 클라이언트로부터 데이터를 수신할 것으로 예상하는 경우 실망스러울 수 있습니다. 이 문제의 일반적인 이유 중 하나는 본문을 직접 인쇄하려고 시도하기 때문입니다.
Gin은 요청 본문을 ReadCloser 인터페이스 유형으로 나타냅니다. 그러나 이 인터페이스의 문자열 값을 인쇄하면 실제 본문 내용이 표시되지 않습니다.
해결 방법 1: 문자열 읽기 및 인쇄
데모 목적으로만 수동으로 다음을 수행할 수 있습니다. 본문을 문자열로 읽어서 인쇄합니다:
func events(c *gin.Context) {
x, _ := ioutil.ReadAll(c.Request.Body)
fmt.Printf("%s", string(x))
c.JSON(http.StatusOK, c)
}
그러나 이는 본문 콘텐츠를 소비하므로 권장되는 접근 방식은 아닙니다.
해결책 2: 바인딩 사용
액세스에 선호되는 방법 Gin의 요청 본문은 바인딩을 사용하는 것입니다. Gin은 JSON과 같은 일반적인 데이터 형식에 대한 내장 바인딩을 제공합니다. 예상 데이터를 나타내는 구조체를 정의한 다음 c.Bind를 사용하면 본문을 자동으로 구문 분석하고 구조체에 바인딩할 수 있습니다.
type E struct {
Events string
}
func events(c *gin.Context) {
data := &E{}
c.Bind(data)
fmt.Println(data)
c.JSON(http.StatusOK, c)
}
이 접근 방식을 사용하면 요청 본문이 올바르게 구문 분석되고 정의된 구조체를 통해 액세스할 수 있습니다.
추가 참고
수동으로 요청 본문 읽기 구조체에 바인딩하면 본문 콘텐츠가 소비됩니다. 이는 c.Bind에 대한 후속 호출이 실패함을 의미합니다. 따라서 디버깅 목적으로만 문자열 읽기 기술을 사용하거나(권장되지 않음) 바인딩을 사용하여 일관된 방식으로 본문에 액세스하는 것이 중요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3