Olá! Estou escrevendo uma API diferente da do curso, no meu caso é um cadastro de usuários.
Eu mudei alguns passos para que eu conseguisse realizar o post através de um formulário html (.jsp na verdade). Se eu uso meu formulário, ao enviar ele manda uma requisição post pro /usuarios e na dev tools do Chrome ele me avisa que a requisição retornou 201, imprime no corpo da página o json do UsuariosDto que criei e até mesmo cadastra no banco (Estou usando o mariaDB). Mas por algum motivo no Postman ele sempre retornar Bad Request (400). No console do eclipse eu recebo a mensagem:
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'nome' is not present]
No UsuarioController o método que usei para receber os parâmetros foi o @RequestParam e eu passo como parâmetro do método os parâmetros preenchidos do formulário.
Esse é o método no meu UsuarioController.
// Response POST
@PostMapping
public ResponseEntity<UsuarioDto> cadastrar(@RequestParam String nome, String cpf, String email, String dataNascimento, UriComponentsBuilder uriBuilder) throws URISyntaxException {
UsuarioForm form = new UsuarioForm();
Usuario usuario = form.converter(dataNascimento, nome, cpf, email);
usuariosRepository.save(usuario);
URI uri = uriBuilder.path("/usuario/{id}").buildAndExpand(usuario.getId()).toUri();
return ResponseEntity.created(uri).body(new UsuarioDto(usuario));
}
Esse é meu UsuarioForm.
public Usuario converter(String dataNascimento, String nome, String cpf, String email) {
return new Usuario(dataNascimento, nome, cpf, email);
Eu envio no Postman um json assim:
{
"dataNascimento":"01-02-1992",
"nome":"Guilherme",
"cpf":"12345678912",
"email":"emailguilherme@hotmail.com"
}
De restante do Postman usei as mesmas configurações do professor na aula, content-type e application/json no header.
Como minha api vai ter uma página de cadastro de usuário, achei melhor já fazer um formulário para enviar o post pro banco. Estou fazendo isso da maneira correta?
EDIT Resolvido (parcialmente).
Meu form faz um request com content-type: 'application/x-www-form-urlencoded' que é até onde entendi, o padrão para o tipo de conteúdo que um form envia. Acontece que eu estava tentando enviar esses parâmetros com json, como estou usando @RequestParam no meu UsuarioController, isso não é possível, ele está esperando receber os parâmetros do tipo texto... Acredito que ideal seria tentar enviar por json e receber os parâmetros com @RequestBody como o professor fez na aula. Vou fazer uns testes semelhantes aos do professor mais tarde mas por enquanto foi tudo o que consegui.
Obrigado desde já!