What is the best way to check for empty request Body?

if http.Request().Body == http.NoBody {
  // TODO.
}

You always need to read the body to know what the contents are. The client could send the body in chunked encoding with no Content-Length, or it could even have an error and send a Content-Length and no body. The client is never obligated to send what it says it's going to send.

The EOF check can work if you're only checking for the empty body, but I would still also check for other error cases besides the EOF string.

err := json.NewDecoder(r.Body).Decode(input)
switch {
case err == io.EOF:
    // empty body
case err != nil:
    // other error
}

You can also read the entire body before unmarshalling:

body, err := ioutil.ReadAll(r.Body)

or if you're worried about too much data

body, err := ioutil.ReadAll(io.LimitReader(r.Body, readLimit))

Tags:

Http

Go