Tobe
Julho 23, 2021, 6:42pm
#1
Ola, boa tarde!
Então estou com esse erro ai, alguém com esperiência para me ajudar?
No spring o metodo:
@PutMapping(path = { "/{id}" })
public ResponseEntity<Cliente> atualizar(@PathVariable("id") Long id, @Valid @RequestBody Cliente cliente) {
if (!cs.existsById(id)) {
return ResponseEntity.notFound().build();
}
System.out.println(id);
cliente.setId(id);
cliente = cs.atualizar(cliente);
return ResponseEntity.ok(cliente);
}
No angular a url:
updateCliente(cliente:Cliente){
console.log(cliente);
return this.http.put<Cliente>(this.url+"/"+cliente.id, cliente);
}
Deve ter sido impresso no console uma stacktrace com o erro específico. Veja se tu acha e posta aqui pra gente ver.
Tobe
Julho 23, 2021, 7:40pm
#3
Então Lucas, quando eu busco o cliente ele retorna e da esse erro: que deve ser referente ao dataNascimente, que ainda não esta cadastrando:
Porém: se tento atualizar ai, da o erro 400:
Tobe
Julho 23, 2021, 7:53pm
#5
Achei um warn no servidor:
2021-07-23 16:56:52.635 WARN 15056 — [nio-8080-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type ‘java.lang.String’ to required type ‘java.lang.Long’; nested exception is java.lang.NumberFormatException: For input string: “undefined”]
1 curtida
Isso que estava falando msm, mas achei que ia ter uma exception em vez de warning.
Nesse caso, ele não conseguiu converter o body da requisição. No console do navegador, na aba network , vc consegue inspecionar os dados da requisição e ver o que está sendo passado pro servidor. Veja qual campo está sendo enviado como undefined.
Tobe
Julho 23, 2021, 9:44pm
#7
Como podes ver, na classe serviço ele passa um objeto:
Ah, reparei agora. O ID está sendo passado undefined na URL
Tobe
Julho 23, 2021, 9:52pm
#9
Tem uma engembraçãozinha que faço com o id - no componente listar, eu pego um id do cliente que vem da tabela quando clico no botão editar, na tabela qu lista os clientes:
Atualizar(cliente:Cliente): void{
// console.log(id);
localStorage.setItem("id", cliente.id.toString());
this.router.navigate(["editarcliente"]);
}
E no componente editar tenho que, conveter em number:
Atualizar(){
let id= localStorage.getItem("id");
var numberValue = Number(id);
this.clienteService.getCientePorID(numberValue)
.subscribe(data=>{
this.cliente=data;
this.formulario = this.formBuilder.group({
nome: [this.cliente.nome],
cpf: [this.cliente.cpf],
dataNascimento: [new Date().getDay()]
//dataNascimento: [this.cliente.dataNascimento]
})
})
}
Será que tem haver?
Como está a parte que realiza a requisição para alterar os dados do cliente?
Tobe
Julho 23, 2021, 9:56pm
#11
O metodo de baixo vai no servidor e busca o cliente, porém quando uso o de cima acontece o erro:
updateCliente(cliente:Cliente){
console.log(cliente);
return this.http.put<Cliente>(this.url+"/"+cliente.id, cliente);
}
////////////////////BUSCA CLIENTE PARA ATUALIZAR/////////////////
getCientePorID(id:number){
return this.http.get<Cliente>(this.url+"/"+id);
}
Tobe:
console.log(cliente);
Esse console imprime com o ID preenchido?
Tobe
Julho 23, 2021, 10:01pm
#13
Não! botei outro mas deu undefinido:
updateCliente(cliente:Cliente){
console.log(cliente);
console.log(cliente.id);
return this.http.put<Cliente>(this.url+"/"+cliente.id, cliente);
}
O endpoint que retorna o cliente por ID está realmente retornando o ID na requisição?
Tobe
Julho 23, 2021, 10:13pm
#15
Botei um console no editar que chama o metodo, e vem o 13:
Atualizar(){
let id= localStorage.getItem("id");
var numberValue = Number(id);
this.clienteService.getCientePorID(numberValue)
.subscribe(data=>{
this.cliente=data;
this.formulario = this.formBuilder.group({
nome: [this.cliente.nome],
cpf: [this.cliente.cpf],
dataNascimento: [new Date().getDay()]
//dataNascimento: [this.cliente.dataNascimento]
})
console.log(this.cliente.id);
})
}
Tobe
Julho 23, 2021, 10:20pm
#16
Solucionado, faltava atualizar o o formulário com o id, no metodo acima:
id: [this.cliente.id],
1 curtida
Top! Nem tinha reparado nisso!
Tobe
Julho 23, 2021, 10:21pm
#18
Pois é! Valeu Lucas obrigado!