Procurei em todos os post's e não achei nada a respeito. Simplemente ele realiza e requisição porém não salve e retorna o id nulo
Procurei em todos os post's e não achei nada a respeito. Simplemente ele realiza e requisição porém não salve e retorna o id nulo
TopicoController
@PutMapping("/{id}")
public ResponseEntity<TopicoDTO> atualizarPUT(@PathVariable Long id, @RequestBody @Valid AtualizacaoTopicoForm form) {
Topico topico = form.atualizarFormPUT(id, topicoRepository);
return ResponseEntity.ok(new TopicoDTO(topico));
}
AtualizacaoTopicoForm
package br.com.springboot.API.forum.controller.form;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;
import br.com.springboot.API.forum.modelo.Topico;
import br.com.springboot.API.forum.repository.TopicoRepository;
public class AtualizacaoTopicoForm {
/**
* @NotNull - Não pode estar nulo
* @NotEmpty - Não pode ser uma String vazia
* @Length - Limite de caracteres
*/
@NotNull @NotEmpty @Length(min = 10)
private String titulo;
@NotNull @NotEmpty @Length(min = 20)
private String mensagem;
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
/**
* Método que atualiza um registro por id. A classe que chama ele
* atualizarPUT de TopicoController ja vai receber os dados titulo
* e mensagem na requisição. Ao chegar aqui recebem o novo valor
* definido para realizar o update e deixar os novos dados prontos
* para fazer o update.
*
* @param id
* @param topicoRepository
* @return
*/
public Topico atualizarFormPUT(Long id, TopicoRepository topicoRepository) {
Topico topico = topicoRepository.getOne(id);
topico.setTitulo(this.titulo);
topico.setMensagem(this.mensagem);
return topico;
}
}
Entidade Topico
package br.com.springboot.API.forum.modelo;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
public class Topico {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String titulo;
private String mensagem;
private LocalDateTime dataCriacao = LocalDateTime.now();
@Enumerated(EnumType.STRING) // para a jpa armazenar o nome do enum e não a representação numérica da ordem em que está declarada
private StatusTopico status = StatusTopico.NAO_RESPONDIDO;
@ManyToOne
private Usuario autor;
@ManyToOne
private Curso curso;
@OneToMany(mappedBy = "topico")
private List<Resposta> respostas = new ArrayList<>();
public Topico() {}
public Topico(String titulo, String mensagem, Curso curso) {
this.titulo = titulo;
this.mensagem = mensagem;
this.curso = curso;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Topico other = (Topico) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public LocalDateTime getDataCriacao() {
return dataCriacao;
}
public void setDataCriacao(LocalDateTime dataCriacao) {
this.dataCriacao = dataCriacao;
}
public StatusTopico getStatus() {
return status;
}
public void setStatus(StatusTopico status) {
this.status = status;
}
public Usuario getAutor() {
return autor;
}
public void setAutor(Usuario autor) {
this.autor = autor;
}
public Curso getCurso() {
return curso;
}
public void setCurso(Curso curso) {
this.curso = curso;
}
public List<Resposta> getRespostas() {
return respostas;
}
public void setRespostas(List<Resposta> respostas) {
this.respostas = respostas;
}
}
Persebi que a JPA gera as tabelas com id's normal, porém quando faço get ou post o campo id está vindo nulo "id":"null"
Oi Bruno,
No seu controller o objeto que você retorna é o TopicoDto, posta aqui então essa sua classe.
Rodrigo, pode desconsiderar, eu optei por baixar o seu projeto mesmo e dar continuidade por ele. E quando fui testar ele rodou perfeitamente. É quase 100% de chances que eu deixei de colocar algum detalhe. Muito obrigado pelo seu retorno !!!