Quando aciono por PUT, o meu objeto “produto” fica o atributo “id” com valor null. Todo o resto é passado certinho (preco, nome, descricao) menos o id.
Consequentemente não consigo salvar as alterações do meu cadastro.
Parece ser alguma coisa com o id mesmo, já fiz vários testes (sem usar os verbos PUT, passando outros valores no id, etc).
Segue meu model para verificação:
packagebr.com.mobilepos.models;importjavax.persistence.*;importjavax.validation.constraints.Max;importjavax.validation.constraints.Min;importjavax.validation.constraints.NotNull;importorg.hibernate.validator.constraints.Length;@EntitypublicclassProduto{@Id@GeneratedValueprivateLongid;@NotNull(message="Nome não preenchido")@Length(max=50)privateStringnome;@NotNull(message="Descrição não preenchida")@Length(max=200)privateStringdescricao;@Min(0)@Max(99999)privatedoublepreco;publicLonggetId(){returnid;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetDescricao(){returndescricao;}publicvoidsetDescricao(Stringdescricao){this.descricao=descricao;}publicdoublegetPreco(){returnpreco;}publicvoidsetPreco(doublepreco){this.preco=preco;}}
L
lcsmoretto
Galera,
depois de muito quebrar a cabeça percebi que meu model estava sem o método setId. Não sei por que meu Eclipse não gerou quando mandei gerar os getters and setters.
Mas tudo bem, resolvido o problema!
Lucas_Cavalcanti
se vc muda o @Put pra @Post funciona?
tem algum input que mexe no id?
L
lcsmoretto
Não tem nenhum input que mexe no id não (é enviado pelo action do formulário apenas).
Se eu mudar pra POST funciona (desde que alterado o verbo que aciona) porque não tem nenhuma outra ação que irá “bater” com a annotation @Post + parâmetro (a do adicionar é sem parâmetro).
Lucas_Cavalcanti
com o setId() funcionou mesmo com Put?
L
lcsmoretto
Funcionou sim, na verdade faltava o método setId(). Não acionei ele manualmente (na verdade não mudei nada do código que postei acima, apenas criei o método).
Meu atributo id está como private e não tinha setId pra ele, então imagino que ele não conseguisse atribuir o valor. Já no método que adiciona o registro ele não é passado porque é auto incremento (@GeneratedValue)