1
resposta

Não consegui usar o NewDecoder.Decode

Pessoal, tentei usar o Decode mas o json novaPersonalidade continuava com suas variáveis vazias, não deu erro, só gravou vazio

json.NewDecoder(r.Body).Decode(&novaPersonalidade)

mudei para o Unmarshal, conforme código abaixo e deu certo

requestBody, err := ioutil.ReadAll(r.Body)
if err != nil {
        http.Error(w, "Erro ao ler o corpo da requisição", http.StatusBadRequest)
        return
}
json.Unmarshal(requestBody, &novaPersonalidade)

O que será que fiz de errado para não dar certo da primeira forma?

1 resposta

Olá, Daniel! Entendo que você está com dificuldades em usar o NewDecoder.Decode na sua API em Go. Vamos tentar entender o que pode ter acontecido.

A função json.NewDecoder(r.Body).Decode(&novaPersonalidade) é usada para decodificar o corpo da requisição (que deve estar em formato JSON) e armazenar o resultado na variável novaPersonalidade.

O fato de você não ter recebido nenhum erro e a variável novaPersonalidade ter ficado vazia pode indicar que o corpo da requisição não estava no formato JSON esperado ou estava vazio.

No entanto, quando você mudou para o Unmarshal, funcionou perfeitamente. Isso pode ser porque o Unmarshal lê um slice de bytes, enquanto o NewDecoder lê de um io.Reader. Quando você fez ioutil.ReadAll(r.Body), você leu todo o corpo da requisição para um slice de bytes, que você então passou para o Unmarshal.

Se você quiser continuar usando o NewDecoder, certifique-se de que o corpo da requisição está no formato JSON correto e não está vazio. Aqui está um exemplo de como você pode fazer isso:

var novaPersonalidade models.Personalidade
err := json.NewDecoder(r.Body).Decode(&novaPersonalidade)
if err != nil {
    http.Error(w, "Erro ao decodificar o corpo da requisição", http.StatusBadRequest)
    return
}

Neste exemplo, eu adicionei uma verificação de erro para o Decode. Se houver um erro ao decodificar o corpo da requisição, ele retornará um erro 400 para o cliente.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software