>백엔드 개발 >Golang >Go-Gin 미들웨어에서 요청 본문을 여러 번 읽으려면 어떻게 해야 합니까?

Go-Gin 미들웨어에서 요청 본문을 여러 번 읽으려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-16 02:20:14166검색

How Can I Read the Request Body Multiple Times in Go-Gin Middleware?

Go-Gin 미들웨어에서 요청 본문을 여러 번 가져오는 경우

웹 프레임워크인 Go-Gin에서 개발자는 다음과 같은 상황에 직면할 수 있습니다. 요청 본문을 여러 번 읽어야 합니다. 이는 본문 데이터가 유효성 검사 목적으로 사용되고 나중에 후속 함수에 전달될 때 필요합니다.

이 문제를 해결하는 한 가지 접근 방식은 유효성 검사를 수행하기 전에 본문을 변수로 읽어온 다음 본문을 원래의 상태로 복원하는 것입니다. 다음 함수를 계속하기 전에 원래 상태:

func SignupValidator(c *gin.Context) {
    var bodyBytes []byte
    var bodyBytesCopy []byte
    if c.Request.Body != nil {
        bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
    }
    copy(bodyBytesCopy, bodyBytes) // Save body for later use
    var user entity.User
    if err := c.ShouldBindJSON(&user); err != nil {
        // Validation code
        c.Abort()
        return
    }
    c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytesCopy)) // Restore original body
    c.Next()
}

이 접근 방식은 ioutil.ReadAll 함수를 사용하여 원본 스트림의 본문을 읽은 다음 유효성 검사에 사용할 복사본을 생성합니다. 그런 다음 후속 기능이 액세스할 수 있도록 원래 본문이 복원됩니다.

위 내용은 Go-Gin 미들웨어에서 요청 본문을 여러 번 읽으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.