> 백엔드 개발 > Golang > Gin/Golang에서 빈 요청 본문을 처리하는 방법은 무엇입니까?

Gin/Golang에서 빈 요청 본문을 처리하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-29 09:05:02
원래의
996명이 탐색했습니다.

How to Handle Empty Request Bodies in Gin/Golang?

Gin/Golang에서 빈 요청 본문 처리

Go와 Gin을 이해하는 과정에서 요청 본문을 검색하는 데 문제가 발생할 수 있습니다. 이 문서에서는 문제를 자세히 살펴보고 주어진 상황에 따라 포괄적인 솔루션을 제공합니다.

문제

외부 POST 요청에서 요청 본문을 읽으려고 하지만 출력이 일관되게 나타납니다.

해결책

이 문제는 인터페이스 유형 ReadCloser인 c.Request.Body의 문자열 값을 인쇄하려고 시도할 때 발생합니다. 본문에 예상 데이터가 포함되어 있는지 확인하려면 해당 값을 문자열로 추출하여 인쇄하면 이해가 쉽습니다.

<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>
로그인 후 복사

정보를 제공하기는 하지만 요청 본문에 액세스하는 데는 이 방법을 권장하지 않습니다. 대신, 구문 분석 프로세스를 단순화하는 Gin의 바인딩 기능을 활용하십시오.

<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.Request.Body가 고갈되는 것을 방지하고 Gin이 읽을 수 있게 됩니다.

주의

ioutil.ReadAll(c.Request.Body)를 사용하여 본문을 읽으면 본문이 고갈되어 Gin이 읽을 수 없게 됩니다.

<code class="go">func events(c *gin.Context) {
    x, _ := ioutil.ReadAll(c.Request.Body)
    fmt.Printf("%s", string(x))
    data := &E{}
    c.Bind(data) // data remains unchanged since c.Request.Body has been depleted.
    fmt.Println(data)
    c.JSON(http.StatusOK, c)
}</code>
로그인 후 복사

또한 이 엔드포인트의 JSON 응답에는 빈 Request.Body가 표시될 수 있습니다. 이는 JSON 마샬링 메서드가 ReadCloser를 직렬화할 수 없어 빈 표현이 발생하기 때문입니다.

위 내용은 Gin/Golang에서 빈 요청 본문을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿