Olá, Luan. Como vai?
O erro 400 (Bad Request) é a forma de a API (o servidor backend) avisar ao seu front-end em React que a requisição chegou até lá, mas o formato dos dados enviados está incorreto ou incompleto.
Analisando o comportamento que você descreveu (o servidor reclamando que o campo name não é uma string ou está chegando como nulo/vazio), o problema costuma estar na forma como os dados estão sendo capturados no formulário ou estruturados no corpo (body) do fetch ou do axios.
Como você compartilhou o seu repositório no GitHub, dei uma olhada na estrutura do seu projeto para identificar o que pode estar causando esse comportamento anômalo.
O que investigar no seu código:
Aqui estão os pontos críticos que costumam gerar esse exato erro de validação (campo name nulo/tipo incorreto) e que você deve verificar nos arquivos do seu formulário de registro:
1. Mapeamento do Estado (useState)
Verifique se a variável de estado que guarda o nome do usuário está inicializada corretamente como uma string vazia e se está sendo atualizada no evento onChange do input de nome.
Se o estado for iniciado como undefined ou se o onChange não estiver atualizando o valor, a requisição enviará um campo nulo para a API.
// O correto é inicializar como string vazia
const [nome, setNome] = useState('');
// No seu input de Nome, certifique-se de que ele está assim:
<input
type="text"
value={nome}
onChange={(evento) => setNome(evento.target.value)}
/>
2. Correspondência de Chaves no Objeto de Envio
O back-end da Alura geralmente é muito rígido com o nome das propriedades do arquivo JSON que ele espera receber. Se a API espera uma propriedade chamada name e você enviar nome (em português), o servidor vai ler o campo name como nulo/ausente e disparar o Erro 400.
Abra o arquivo onde você faz a requisição HTTP (onde está o seu fetch ou axios.post) e certifique-se de que a propriedade foi traduzida exatamente para o formato esperado pela API:
// Exemplo se você estiver usando fetch:
fetch('http://localhost:8080/public/registrar', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: nome, // Certifique-se de que a chave se chama 'name' e o valor é a sua string do estado
email: email,
password: password
})
})
3. O cabeçalho Content-Type
Caso o name esteja correto, garanta que você não esqueceu de incluir o cabeçalho 'Content-Type': 'application/json'. Sem ele, a API não consegue interceptar e converter o corpo da requisição em um objeto legível, interpretando todos os campos como nulos.
Uma dica sobre o Git e branches
Dando uma olhada rápida no seu link do GitHub, notei que os commits mais recentes na sua branch principal (main) parecem não refletir o código com a implementação do formulário completo de login e registro que você mencionou.
Boa prática de mercado: Se você criou o código de autenticação em uma branch separada (ex: feature/login ou desenvolvimento), lembre-se de dar um git push nessa branch específica e compartilhar o link dela aqui no fórum. Isso ajuda a comunidade e os instrutores a verem as linhas exatas do seu arquivo de requisição para te dar uma resposta direta e certeira!
Revise o nome das chaves no seu objeto do body e a inicialização dos seus useState. Dando tudo certo ou persistindo o erro, comente aqui dizendo qual arquivo faz o disparo do formulário para analisarmos juntos.
Espero que possa ter lhe ajudado!