Gin/Golang의 빈 요청 본문
Gin으로 POST 요청을 처리할 때 요청 본문이 다음과 같이 나타나는 문제가 가끔 발생할 수 있습니다. 비어있어. 이는 특히 클라이언트로부터 데이터를 수신할 것으로 예상하는 경우 실망스러울 수 있습니다. 이 문제의 일반적인 이유 중 하나는 본문을 직접 인쇄하려고 시도하는 것입니다.
Gin은 요청 본문을 ReadCloser 인터페이스 유형으로 나타냅니다. 그러나 이 인터페이스의 문자열 값을 인쇄해도 실제 본문 내용은 공개되지 않습니다.
해결책 1: 문자열 읽기 및 인쇄
시연 목적으로만 수동으로 다음을 수행할 수 있습니다. 본문을 문자열로 읽어서 인쇄합니다.
<code class="go">func events(c *gin.Context) { x, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("%s", string(x)) c.JSON(http.StatusOK, c) }</code>
그러나 이는 본문 콘텐츠를 소비하므로 권장되는 접근 방식은 아닙니다.
해결책 2: 바인딩 사용
Gin에서 요청 본문에 액세스하는 가장 좋은 방법은 바인딩을 사용하는 것입니다. Gin은 JSON과 같은 일반적인 데이터 형식에 대한 내장 바인딩을 제공합니다. 예상 데이터를 나타내는 구조체를 정의한 다음 c.Bind를 사용하면 본문을 자동으로 구문 분석하고 구조체에 바인딩할 수 있습니다.
<code class="go">type E struct { Events string } func events(c *gin.Context) { data := &E{} c.Bind(data) fmt.Println(data) c.JSON(http.StatusOK, c) }</code>
이 접근 방식을 사용하면 요청 본문이 올바르게 구문 분석되고 다음을 통해 액세스할 수 있습니다. 정의된 구조체.
추가 참고 사항
요청 본문을 구조체에 바인딩하기 전에 수동으로 읽으면 본문 콘텐츠가 소비됩니다. 이는 c.Bind에 대한 후속 호출이 실패함을 의미합니다. 따라서 디버깅 목적으로만 문자열 읽기 기술을 사용하거나(권장하지 않음) 바인딩을 사용하여 일관된 방식으로 본문에 액세스하는 것이 중요합니다.
위 내용은 Gin/Golang을 사용할 때 빈 요청 본문을 처리하는 방법: 바인딩 및 디버깅 기술 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!